浅谈js原型以及原型链

一、构造函数

    在js中构造函数和普通函数一样, 唯一区别就是他们调用的方式不同,构造函数通过new 运算符来调用,否则就是普通函数。

浅谈js原型以及原型链_第1张图片

在上面例子中 Student本身是一个普通函数,但通过new 来创建对象时,就是一个构造函数,并产生了两个实例。示例中 st1 和 st2 都是 Student 的实例,它们两个都有 constructor属性 并且指向Student。也就是说实例的构造函数属性constructor 指向其构造函数。

、 prototype 属性

prototype : 每一个函数对象都会有一个prototype属性, 这个属性是一个指针,指向一个对象,也就是原型对象。(注意:普通对象是没有这个属性的)

浅谈js原型以及原型链_第2张图片

如上图Student 函数对象中有个prototype 属性,并且这个prototype 属性对象中 还有个constructor属性指向 Student  也就是说 原型对象中会有一个constructor构造函数属性, 这个属性constructor 指向 prototype 属性所在的函数。如下代码:

三、__proto__

__proto__:是每个js对象拥有的内置属性,是js内部使用寻找原型链的属性,用于指向创建它的函数对象的原型对象prototype,通过该属性可以允许使用实例对象直接访问原型。

浅谈js原型以及原型链_第3张图片

如上述例子,st1._proto_ 指向Student.prototype。

四、原型链

上面说过每个js对象都有_proto_属性,并且这个属性指向创建它的函数对象的prototype,通过这一点, 把这个有__proto__一层一层串起来的直到Object.prototype.__proto__为null的链叫做原型链

浅谈js原型以及原型链_第4张图片

 

你可能感兴趣的:(js)