学习笔记——原型对象与原型链


在javascript中的所有变量与U对象,我们都可以认为是直接或间接的new某个函数来创建的。

构造函数:被new的函数,称为对象的构造函数。

原型对象:构造函数上有一个prototype属性,称为对象的原型对象。所有通过new出来的实例(对象)都会共享原型对象上的方法和属性。

例如: 

var arr = new Array();    // Array()是构造函数, arr是实例(对象)
Array.prototype.a = 1;    // Array.prototype是原型对象
console.log(arr.a);       // 结果是:1, arr共享原型对象上的方法和属性

对象在调用一个方法时会首先在自身里寻找是否有该方法,若没有,则去原型链上去找它的原型,找不到,再继续找原型的原型,依次层层递进。

原型链:原型对象之间形成了一条链条。例如上述例子中,使用数组中的方法时,会先去Array.prototype上找有没有,然后再去它原型对象的原型对象Object.prototype上去找,如果没找到,就去Object的原型的原型null上去找。这样就形成了一条原型链。

 例如:

var arr = new Array();
Object.prototype.b = 2; 
Array.prototype.a = 1;
console.log(arr.b); // 2
// 输出arr.b是先去Array.prototype找有没有属性b,再去Object.prototype找

原型对象是指原型所指向的对象,例如:数组的原型对象就是Array.prototype所指向的对象。

原型对象中都会有默认的constructor属性来指向函数本身。例如array.constructor结果为其构造函数Array()。

原型对象与原型链主要用来实现继承。

实例,构造函数与原型对象的结构图为:

猜你喜欢

转载自blog.csdn.net/qq_41339126/article/details/109428967