JavaScript中的原型链也算是JavaScript中的一个高级话题,一直以来对这块的知识理解地不是特别深刻,现再记录一下这块的学习笔记:
1.从最简单的代码开始:三行代码引出js中的高级话题
function Foo(){};
var foo = new Foo();
2.我们首先看一下这两行代码在JavaScript中的关系:
641
3.深入剖析:
这两行代码实际上包含了以下三个过程:
3.1:当我们创建一个自定义的函数Foo,该函数就会自动创建一个prototype属性,这个属性指向函数的原型对象;
3.2:原型对象会默认去取得constructor属性,指向构造函数。
第一行代码实际上发生了以上两个过程,我的理解如下:
父类(原型对象)的constructor属性指向子类对象(函数),子类的prototye属性指向了父类(原型对象),这里的原型对象可以表示为Foo.prototype。
3.3:当调用构造函数创建一个新实例foo后,该实例的内部将包含一个指针__proto__,指向构造函数的原型对象。
第二行代码执行后,实际上发生了第三个过程,我的理解如下:
每一个实例对象都有一个__proto__属性(指针),这个属性指向了父类(原型对象),而父类(原型对象)的constructor属性指向了子类(函数),而子类(函数)的prototye属性指向了父类对象。
4.现在来梳理任意一个实例,函数与Object这个对象的关系:
我的理解如下:
只要创建了一个Object,这个就会默认有一个protype属性,这个属性指向了Object的原型对象,而Object的原型对象默认会有一个constructor属性,这个属性指向了Object,但是Object的原型对象已经是原型链的最根部了,所以它没有__proto__属性。因此Object的原型对象的__proto__指针指向为null.
函数看做是一个对象以后,其构造函数就是Function(),原型对象就是Function的原型对象,Object函数看作实例对象的话,其构造函数就是Function(),原型对象是Function的原型对象
也就是函数的原型对象是:Function.prototype, Object的原型对象是:Object.protype
其他核心测试代码如下:
Title
评论