HasownProperty()对于重新定义的继承方法(ToString())返回true,但是Mozilla Docs



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

最新更新