js原型链

来源:互联网 发布:ncut算法代码 编辑:程序博客网 时间:2024/06/06 01:52

1、prototype和__proto__的区别

 prototype是函数才有的属性,

在js中,对象在调用一个方法时,会首先在自身寻找是否由该方法,如果没有,则在原型链上寻找,这个原型链就是实例对象的_proto_属性。

对于实例person而言,其内部有一个原型链指针proto,该指针指向了Person.prototype指向的对象。_proto_是每个对象都有的属性

2、什么是原型链

由于_proro_是任何对象都有的属性,而js万物皆对象,所以会形成一条 连起来的链条,递归访问 必须最终到头,并且值是null

当js引擎查找对象属性时,先查找对象本身是否存在该属性,如果不存在,就会继续在原型链上查找,但不会查找自身prototype

var A = function(){};var a = new A();console.log(a.__proto__); //A {}(即构造器function A 的原型对象)console.log(a.__proto__.__proto__); //Object {}(即构造器function Object 的原型对象)console.log(a.__proto__.__proto__.__proto__); //null

3、原型链指针

函数的原型对象constructor默认指向函数本身,原型对象除了有原型属性外,为了实现继承,还有一个原型链指针__proto__,该指针指向上一层的原型对象,而上一层的原型对象的结构依然类似,这样利用__proto__一直指向Object的原型对象上,而Object的原型对象用Object.prototype.__proto__ = null表示原型链的最顶端,如此变形成了javascript的原型链继承,同时也解释了为什么所有的javascript对象都具有Object的基本方法。
作者:Pursue链接:http://www.jianshu.com/p/aa1ebfdad661/來源:简书著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
函数的原型对象constructor默认指向函数本身,原型对象除了有原型属性外,为了实现继承,还有一个原型链指针__proto__,该指针指向上一层的原型对象,而上一层的原型对象的结构依然类似,这样利用__proto__一直指向Object的原型对象上,而Object的原型对象用Object.prototype.__proto__ = null表示原型链的最顶端,如此变形成了javascript的原型链继承,同时也解释了为什么所有的javascript对象都具有Object的基本方法。

4、原型对象

原型对象结构

Function.prototype = {        constructor : Function,        __proto__ : parent prototype,        some prototype properties: ...    };

原型对象用途就是为每个实例对象存储共享的方法和属性,所有的实例共享一个原型对象


函数的原型对象constructor默认指向函数本身,原型对象除了有原型属性外,为了实现继承,还有一个原型链指针__proto__,该指针指向上一层的原型对象,而上一层的原型对象的结构依然类似,这样利用__proto__一直指向Object的原型对象上,而Object的原型对象用Object.prototype.__proto__ = null表示原型链的最顶端,如此变形成了javascript的原型链继承,同时也解释了为什么所有的javascript对象都具有Object的基本方法。
作者:Pursue链接:http://www.jianshu.com/p/aa1ebfdad661/來源:简书著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

在js中,对象在调用一个方法时,会首先在自身寻找是否由该方法,如果没有,则在原型链上寻找,这个原型链就是实例对象的_proto_属性。

对于实例person而言,其内部有一个原型链指针proto,该指针指向了Person.prototype指向的对象

原创粉丝点击