对象都会有一个属性__proto__指向构造函数的原型对象prototype,之所以我们对象可以构造函数prototype原型对象的属性和方法,就是因为对象有__proto__原型的存在。
1.__proto__对象原型和原型对象prototype是等价的
function Star(uname,age){
this.uname = uname;
this.age = age; //公共属性
}
Star.prototype.sing = function(){
console.log('我会唱歌'); //公共方法
}
var ldh = new Star('刘德华',18);
var zxy = new Star('张学友',19);
ldh.sing();
zxy.sing();
console.log(ldh.__proto__ === Star.prototype);
方法的查找规则:首先先看ldh对象身上是否有sing方法,如果有就执行这个对象上的sing
如果没有sing这个方法,因为有__proto__的存在,就去构造函数原型对象prototype身上去查找sing这个方法
2.__proto__对象原型的意义是在于为对象的查找机制提供一个方向,或者说一条路线,但是它是一个非标准属性,因此在实际开发中,不可以使用这个属性,它只是内部指向原型对象prototype
构造函数、实例、原型对象三者之间的关系