对象,构造函数,原型的三角关系:
每一个构造函数都有prototype属性,指向原型;原型中有属性constructor指向构造函数;实例(对象)中有属性__prototype__指向原型,创建出来的实例是可以直接访问原型对象上的成员。
关于原型上的一些注意点:
添加到构造函数上的一些成员,实例是无法获取到的;添加到原型上的成员,实例可以获取。
<script>
function Person(name, age) {
this.name = name;
this.age = age;
}
Person.prototype.car = '摩托罗拉';
Person.money = 1000;
var p = new Person('zs', 18);
console.log(p.name); // zs
console.log(p.age); // 18
console.log(p.car); // 摩托罗拉
console.log(p.money); // undefined;
</script>
原型链的形成:
一个对象有它自己的原型,原型也可以看成一个对象,有它自己的原型,这样一环扣一环,就形成了一个原型链,。
结论:实例可以访问自己的属性,原型的属性可以访问,原型链上的也就以访问。
实例在获取属性时,首先时是去访问自己的,如果没有,就在原型链上就近查找;当实例去修改属性时,只会修改自己的,自己有这个属性,直接修改,没有就新建添加值,不会对原型进行修改。