访问一个对象时,js引擎内部的查找过程,会按以下顺序进行查找:
- 首先在自身的对象查找,如果有,就返回。
- 如果对象自身没有,就去对象所属的构造函数进行查找,如果有就返回。
- 如果在对象所属的构造函数中没有找到,就去构造函数的原型(链)上进行查找。
- 如果在整个原型链都查找完毕时,仍然找不到目标属性,就会返回undefined。
示例:
demo1:印证上述第一点
function Bar() {
this.color = "red"
}
Bar.prototype.color = "green";
let obj = new Bar();
obj.color = "blue";
console.log(obj.color); // blue
demo2:印证上述第二点:
function Bar() {
this.color = "red"
}
Bar.prototype.color = "green";
let obj = new Bar();
console.log(obj.color); // red
demo3:印证上述第三点
function Bar() {
}
Bar.prototype.color = "green";
let obj = new Bar();
console.log(obj.color); // green
demo4:印证上述第四点
function Bar() {
}
let obj = new Bar();
console.log(obj.color); // undefined