mozilla hasownproperty doc说
分配对象内的属性将导致辩论者将属性显示为属于对象实例的属性;但这并不意味着" HasownProperty"将是正确的。当属性从原型继承时," HasownProperty(("是错误的,即使对象有自己的副本。
要测试,我在新对象(o
(中重新定义了Object.prototype.toString()
方法,如下所示:
o = new Object();
o.toString = function(){
console.log("ToString redefined");
}
Object.toString();
o.hasOwnProperty('toString');
afaiu,toString()
重新定义应返回false
,因为它是继承的属性,但返回true
。请解释吗?
另外,如果有人可以用一个示例解释以下内容,那将是很棒的:
分配对象内的属性将导致辩论者将属性显示为属于对象实例的属性;但这并不意味着" HasownProperty"将是正确的。
谢谢应用
继承通过原型链起作用:当您尝试访问对象上的属性时,它将返回该对象的属性;如果对象本身没有该属性,则将检查其原型的同一属性,依此类推,依此类推,直到找到该属性或链条结束为止。
so:
let o = {};
o.toString();
这在o
的原型上找到了属性toString
。
o.toString = function () {};
o.toString();
现在无需穿越原型链,因为o
本身具有toString
属性(您只是直接分配给其(。现在做拥有自己的属性 toString
。