猿问

有什么区别?

代码一:

obj.hasOwnProperty(prop);

代码二:

const hasOwnProperty = Object.prototype;
hasOwnProperty.call(obj, prop);

我总是使用第一种编码风格,但我在一些JS书籍或github项目中多次看到第二种编码风格。我想知道这只是一种习惯,或者真的是编写js代码的更好方法。谢谢。


梦里花落0921
浏览 80回答 1
1回答

慕工程0101907

如果不被篡改,则差异相对较小。但是,如果您依赖于包含原型函数,那么各种各样的东西都会妨碍您期望它工作(甚至可能是偶然的)。这就是为什么您经常会看到库直接调用原型方法,而不是依赖于它们对单个对象的完整性。objobj请考虑以下情况:const prop = 'test';obj = {test: 'example'};console.log({ 'version': 'no tampering!', 'obj.hasOwnProperty': obj.hasOwnProperty(prop), 'Object.prototype.hasOwnProperty': Object.prototype.hasOwnProperty.call(obj, prop)});// someone does something you don't expect with objobj.hasOwnProperty = () => false;// NOTE: This at least is a function, there is nothing to stop me from setting it to something that would BREAK the function call...// E.g. obj.hasOwnProperty = 42;console.log({ 'version': 'some tampering!', 'obj.hasOwnProperty': obj.hasOwnProperty(prop), 'Object.prototype.hasOwnProperty': Object.prototype.hasOwnProperty.call(obj, prop)});或者,如果 对象不继承原型呢?objObjectconst obj =  Object.create(null);console.log(obj.hasOwnProperty);
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答