//当实例对象和原型中都有sex信息的时候,访问对象的属性获取的是谁的信息呢?
function Person(age,sex) {
this.age=age;
this.sex=sex;
}
Person.prototype.sex=”女”;
var per=new Person(10,”男”);
console.log(per.sex);
每当代码读取某个对象的某个属性时,都会执行一次搜索,目标是具有给定名字的属性
1. 搜索首先从对象实例本身开始
2. 如果在实例中找到了具有给定名字的属性,则返回该属性的值
3. 如果没有找到,则继续搜索指针指向的原型对象,在原型对象中查找具有给定名字的属性
4. 如果在原型对象中找到了这个属性,则返回该属性的值
5. 如果在原型对象中没有找到这个属性,则继续从父亲的原型中查找,有就返回
也就是说,在我们调用 per.sex
的时候,会先后执行两次搜索:
1. 首先,解析器会问:“实例 per 有 sex 属性吗?”答:“没有。
2. 然后,它继续搜索,再问:“ per 的原型有 sex 属性吗?”答:“没有。
3. 于是,它就从父亲的原型中查找有没有sex
而这正是多个对象实例共享原型所保存的属性和方法的基本原理。
总结:
1. 先在自己身上找,找到即返回
2. 自己身上找不到,则沿着原型链向上查找,找到即返回
3. 如果一直到原型链的末端还没有找到,则返回 undefined