Mozilla hasOwnProperty doc说
分配对象中的属性将导致调试器将属性显示为属于对象实例;但这并不意味着“hasOwnProperty”将是真的。 当属性从原型继承时,“hasOwnProperty()”为false,即使该对象有自己的副本。
为了测试,我在新对象(Object.prototype.toString()
)中重新定义了o
方法,如下所示:
o = new Object();
o.toString = function(){
console.log("ToString redefined");
}
Object.toString();
o.hasOwnProperty('toString');
AFAIU,toString()
重新定义应该返回false
,因为它是一个继承的属性,但它返回true
。请解释一下?
此外,如果有人可以通过一个例子来解释以下内容,那就太棒了:
分配对象中的属性将导致调试器将属性显示为属于对象实例;但这并不意味着“hasOwnProperty”将是真的。
感谢 应用
答案 0 :(得分:0)
继承通过原型链工作:当您尝试访问对象的属性时,它将返回该对象的属性;如果对象本身没有该属性,则检查其原型是否具有相同的属性,依此类推,直到找到该属性或链结束。
所以:
let o = {};
o.toString();
这会在toString
的原型上找到属性o
。
o.toString = function () {};
o.toString();
现在没有必要遍历原型链,因为o
本身具有toString
属性(您只是直接分配给它)。现在它 拥有拥有的属性 toString
。