var obj = ;objhasOwnPropertytoString false 覆盖掉继承的 hasOwnProperty 方法objhasOwnProperty = function return true;;objhasOwnPropertytoString trueObjectprototypehasOwnPropertycallobj toString false帮我解释
这段代码首先创建了一个空对象 obj,然后使用 hasOwnProperty 方法检查该对象是否具有属性 toString,由于该属性是从 Object.prototype 继承而来的,因此返回值为 false。
接下来,代码覆盖了 obj 对象的 hasOwnProperty 方法,将其重写为总是返回 true。因此,再次调用 obj.hasOwnProperty('toString') 时,返回值为 true。
最后一行代码使用 Object.prototype.hasOwnProperty.call(obj, 'toString'),这是为了避免被重写的 hasOwnProperty 方法影响结果。该行代码会显式地调用 Object.prototype.hasOwnProperty 方法,并传入 obj 对象和属性名 toString,返回值为 false,因为该属性仍然是从原型继承而来的。
原文地址: https://www.cveoy.top/t/topic/hsh1 著作权归作者所有。请勿转载和采集!