对象成员查找规则
① 当访问一个对象的属性(包括方法)时,首先查找这个对象自身有没有该属性。
② 如果没有就查找它的原型(也就是 __proto__指向的
prototype 原型对象)。
③ 如果还没有就查找原型对象的原型(Object的原型对象)。
④ 依此类推一直找到 Object 为止(null)。
⑤ __proto__对象原型的意义就在于为对象成员查找机制提供一个方向,或者说一条路线。
例1:
function Star(uname, age){
this.uname = uname;
this.age = age;
}
Star.prototype.sing = function (){
console.log('我会唱歌')
};
Star.prototype.sex = '女';
var ldh = new Star('刘德华',18);
ldh.sex = '男';
console.log(ldh.sex); //’男‘
原型链:
分析:
给ldh实例对象添加一个名叫sex的属性,并给它赋值为‘男’。
给Star原型对象也添加一个名叫sex的属性,并给它赋值为‘女’。
输出ldh实例对象的sex属性值,结果为‘男’。
例2:
function Star(uname, age){
this.uname = uname;
this.age = age;
}
Star.prototype.sing = function (){
console.log('我会唱歌')
};
Star.prototype.sex = '女';
Object.prototype.sex = '男';
var ldh = new Star('刘德华',18);
console.log(ldh.sex); //’女‘
原型链:
分析:
还是刚才那个例子。
给Star原型对象添加一个名叫sex的属性,并给它赋值为‘女’。
给Object原型对象添加一个名叫sex的属性,并给它赋值为‘男’。
输出ldh实例对象的sex属性值,结果为‘女’。