JavaScript学习--6__原型对象、原型链

先出总结:

##1、 每一个函数数据类型(普通函数、类)都有一个天生自带的属性:prototype(原型),并且这个属性是一个对象数据类型的值。

##2、 prototype上有一个属性constructor(构造函数),属性值是当前函数本身。

##3、 每一个对象也天生自带属性__proto__,他的值是当前实例的原型(prototype)。

 

 

JavaScript对象是一个属性的集合,另外有一个隐式的对象:原型对象。

原型的值可以是null或者一个对象。

由于原型对象本身也是对象,它也有自己的原型,而它自己的原型对象又可以有自己的原型,这样就组成了一条链,也就是原型链。

(说得很绕,其实就是 A的原型是B,B也是个对象它也有原型对象C,然后ABC就组成了原型链。)

Javascript在访问对象的属性时,如果在对象本身中没有找到,则会去原型链中查找,如果遍历整个链依旧没有找到属性,则返回undefined

如果没有显示地声明自己的__proto__属性,这个值默认为Object.prototype,而Object.prototype的__proto__属性的值为null,这也标志着原型链的终结。




    
    原型对象、原型链





以上代码中base就是ext1、ext2的原型 输出如下

JavaScript学习--6__原型对象、原型链_第1张图片

 

构造器
下面的例子以函数Task为一个构造器创建了2个实例task1 task2。




    
    NoName





输出结果如下

JavaScript学习--6__原型对象、原型链_第2张图片

 

它的原型链如下

JavaScript学习--6__原型对象、原型链_第3张图片

函数Task是函数类型有prototype,其他都是对象类型没有prototype。

你可能感兴趣的:(JavaScript学习--6__原型对象、原型链)