Javascript obj.hasOwnProperty()和Object.prototype.hasOwnProperty.call()之间有什么区别?
代码一:Javascript obj.hasOwnProperty()和Object.prototype.hasOwnProperty.call()之间有什么区别?,javascript,Javascript,代码一: obj.hasOwnProperty(prop); 代码二: const hasOwnProperty = Object.prototype; hasOwnProperty.call(obj, prop); 我总是使用第一种编码风格,但我在一些JS书籍或github项目中多次看到第二种编码风格。 我想知道这只是一种习惯,还是一种更好的编写js代码的方式。 谢谢。如果obj未被篡改,则差异相对较小。但是,如果您依赖于包含原型函数的obj,那么各种各样的东西都可能成为阻碍,因为您期望
obj.hasOwnProperty(prop);
代码二:
const hasOwnProperty = Object.prototype;
hasOwnProperty.call(obj, prop);
我总是使用第一种编码风格,但我在一些JS书籍或github项目中多次看到第二种编码风格。
我想知道这只是一种习惯,还是一种更好的编写js代码的方式。
谢谢。如果obj未被篡改,则差异相对较小。但是,如果您依赖于包含原型函数的obj,那么各种各样的东西都可能成为阻碍,因为您期望它可能会工作,即使是在偶然的情况下。这就是为什么您经常看到库直接调用原型方法,而不是依赖于它们对单个对象的处理
考虑这种情况:
const prop=‘test’;
obj={test:'example'};
console.log{
“版本”:“禁止篡改!”,
“obj.hasOwnProperty”:obj.hasOwnPropertyprop,
'Object.prototype.hasOwnProperty':Object.prototype.hasOwnProperty.callobj,prop
};
//有人用obj做了你意想不到的事
obj.hasOwnProperty==>false;
//注意:这至少是一个函数,没有什么可以阻止我将其设置为会中断函数调用的某个值。。。
//例如,obj.hasOwnProperty=42;
console.log{
'版本':'一些篡改!',
“obj.hasOwnProperty”:obj.hasOwnPropertyprop,
'Object.prototype.hasOwnProperty':Object.prototype.hasOwnProperty.callobj,prop
};例如,当需要根据ur QUOTE::中的某些条件选择函数时,应该使用函数变量,但我在一些JS书籍或github项目中多次看到第二种编码样式-->是,如果使用ESLint,则它会在obj.hasOwnProperty上抛出错误,因此,您需要使用另一种方法,这可能是开发人员选择第二种方法的原因之一,是的,它出错的原因由公认的答案解释,或者在这里::谢谢。我认为这种样式有助于避免某种类型的判断,但我从未考虑过有人会尝试将属性“hasOwnProperty”或inhiret从null更改为null。。知道了