对象的原型链

对象的原型链

  1. 凡是对象就有原型
  2. 原型也是对象

凡是对象就有原型, 那么原型又是对象, 因此凡是给定义一个对象, 那么就可以找到他的原型, 原型还有原型. 那么如此下去, 就构成一个对象的序列. 称该结构为原型链.

问题:

  1. 原型链到底到什么时候是一个头
  2. 一个默认的原型链结构是怎样的
  3. 原型链结构对已知语法的修正

原型链的结构

凡是使用构造函数创建出对象, 并且没有利用赋值的方式修改原型, 就说该对象保留默认的原型链.

默认原型链结构是什么样子呢?

    function Person() {}
    var p = new Person();
    // p 具有默认的原型链

默认的原型链结构就是:

当前对象 -> 构造函数.prototype -> Object.prototype -> null

在实现继承的时候, 有时会利用替换原型链结构的方式实现原型继承, 那么原型链结构就会发生改变

  function ItcastCollection () {}
    ItcastCollection.prototype = [];
    var arr = new ItcastCollection();
    // arr -> [] -> Array.prototype -> Object.prototype -> null
    // var arr = new Array();

什么是原型式继承

所谓的原型式继承就是利用修改原型链的结构( 增加一个节点, 删除一个节点, 修改节点中的成员 ), 来使得实例对象可以使用整条链中的所有成员.

这里的使用规则必须满足属性搜索原则

绘制对象的原型链结构

说明: 函数中也有 __proto__ 属性. 注意, 暂时不考虑函数的该属性

    function Person () {}
    var p = new Person();

练习:

  1. 绘制 {} 的原型链结构
  2. 绘制 [] 的原型链结构

在 js 中, 所有的对象字面量在解析以后, 就是一个具体的对象了. 那么可以理解为 调用的 对应的构造方法.

  1. 例如在代码中写上 {}, 就相当于 new Object()
  2. 例如代码中有 [], 就相当于 new Array()
  3. 例如代码中有 /./, 就相当于 new RegExp( ‘.‘ )

注意: 在底层理论执行的过程中, 是否有调用构造函数, 不一定. 和浏览器的版本有关.

在原型链中绘制 Object.prototype 对应的构造函数

练习, 绘制原型链结构

    var o = {
        appendTo: function ( dom ) {
        }
    };
    function DivTag() {}
    DivTag.prototype = o;

    var div = new DivTag();

// div -> DivTag.prototype( 就是 o ) -> Object.prototype -> null
时间: 2024-10-11 21:44:54

对象的原型链的相关文章

内置对象和自定义对象的原型链

内置对象的原型链 新增属性 Object.prototype.mytest = function() { alert("123"); } var o = new Object(); o.mytest(); 重写属性 Object.prototype.toString = function() { alert("破话之王"); } o.toString();

Js 原型对象与原型链

原型对象 每个javascript对象都有一个原型对象,这个对象在不同的解释器下的实现不同.比如在firefox下, 每个对象都有一个隐藏的__proto__属性,这个属性就是"原型对象"的引用. 原型链 由于原型对象本身也是对象,根据上边的定义,它也有自己的原型,而它自己的原型对象又可以有自 己的原型,这样就组成了一条链,这个就是原型链,JavaScritp引擎在访问对象的属性时,如果在对象本 身中没有找到,则会去原型链中查找,如果找到,直接返回值,如果整个链都遍历且没有找到属性,则

一个例子让你明白原型对象和原型链

开篇 之前对js中的原型链和原型对象有所了解,每当别人问我什么是原型链和原型对象时,我总是用很官方(其实自己不懂)的解释去描述.有一句话说的好:如果你不能把一个很复杂的东西用最简单的话语描述出来,那就说明你没有真正的理解.最近正在读<Javascript高级程序设计>,书中对原型对象和原型链的描述让我受益匪浅,下面仅用一个对比性的例子来说明. 我们经常会这么写 function Person () { this.name = 'John'; } var person = new Person(

JavaScript 原型对象和原型链

开篇 之前对js中的原型链和原型对象有所了解,每当别人问我什么是原型链和原型对象时,我总是用很官方(其实自己不懂)的解释去描述.有一句话说的好:如果你不能把一个很复杂的东西用最简单的话语描述出来,那就说明你没有真正的理解.最近正在读<Javascript高级程序设计>,书中对原型对象和原型链的描述让我受益匪浅,下面仅用一个对比性的例子来说明. 我们经常会这么写 1 function Person () { 2 this.name = 'John'; 3 } 4 var person = new

1--面试总结-js深入理解,对象,原型链,构造函数,执行上下文堆栈,执行上下文,变量对象,活动对象,作用域链,闭包,This

参考一手资料:http://dmitrysoshnikov.com/ecmascript/javascript-the-core/中文翻译版本:https://zhuanlan.zhihu.com/p/32042645 Javascript 是一种单线程编程语言,这意味着它只有一个调用栈,call Stack(调用栈 ,,先入后出) 核心:对象,原型链,构造函数,执行上下文堆栈,执行上下文,变量对象,活动对象,作用域链,闭包,This js原型链? 定义 原型对象也是简单的对象并且可以拥有它们自

MDN——javascript——入门——第三章对象——对象.构造函数.原型链.继承——知识点总结

对象Object 由属性property(变量).方法method(函数)组成 var objectName = { member1Name : member1Value, member2Name : member2Value, member3Name : member3Value } member(成员)的值是任意的, 一个如上所示的对象被称之为对象的字面量(literal)——手动的写出对象的内容来创建一个对象.不同于从类实例化一个对象,我们会在后面学习这种方式. 访问对象成员 1.点表示法

javascript之对象,原型链

对象 ECMAScript是高度抽象的面向对象语言,处理对象的.同样也有基本类型,但是他们在需要的情况下,也可以转型成对象. 定义: 对象是拥有一系列属性以及唯一的原型对象.那原型对象可能是对象,也可能为空. 让我们看一个基本对象的例子.对象的原型是通过内部的[[Prototype]]来引用的.然而,我们将会用 __<internal_property>__ 下化线符号替代双中括号,那么对于原型对象: __proto__. 对于下面代码: var foo = { x: 10, y:20 };

js(三) 原型对象与原型链

原型对象 每个javascript对象都有一个原型对象 原型链 由于原型对象本身也是对象,根据上边的定义,它也有自己的原型,而它自己的原型对象又可以有自己的原型,这样就组成了一条链,这个就是原型链,JavaScritp引擎在访问对象的属性时,如果在对象本身中没有找到,则会去原型链中查找,如果找到,直接返回值,如果整个链都遍历且没有找到属性,则返回undefined.原型链一般实现为一个链表,这样就可以按照一定的顺序来查找. 一.指定对象字面量的原型 示例1 思想方法:把一些对象共享的方法.属性,

JavaScript概念总结:作用域、闭包、对象与原型链

1 JavaScript变量作用域 1.1 函数作用域 没有块作用域:即作用域不是以{}包围的,其作用域完成由函数来决定,因而if /for等语句中的花括号不是独立的作用域. 如前述,JS的在函数中定义的局部变量只对这个函数内部可见,称之谓函数作用域. 嵌套作用域变量搜索规则:当在函数中引用一个变量时,JS会搜索当前函数作用域,如果没有找到则搜索其上层作用域,一直到全局作用域. [javascript] view plain copy print? var  value = 'global';