Javascript 为什么要关注重写hasOwnProperty而不是其他Object.prototype方法?
我读过这篇文章,我的问题是后续问题,但我没有看到直接发布后续问题,因此发布了一个与之相关的新问题:Javascript 为什么要关注重写hasOwnProperty而不是其他Object.prototype方法?,javascript,oop,inheritance,Javascript,Oop,Inheritance,我读过这篇文章,我的问题是后续问题,但我没有看到直接发布后续问题,因此发布了一个与之相关的新问题: 我看到了为什么调用Object.prototype.hasOwnProperty(myObj)而不是myObj.hasOwnProperty的解释——用户提供的字符串创建的对象的第二点(来自用户ZZZBOV)对我来说是最重要的一点但是。如果我们要担心这一点,那么为什么我们不同样担心Object.prototype的其他方法(意外地)被覆盖?比如isPrototypeOf?在Axel的书和其他地方
我看到了为什么调用Object.prototype.hasOwnProperty(myObj)而不是myObj.hasOwnProperty的解释——用户提供的字符串创建的对象的第二点(来自用户ZZZBOV)对我来说是最重要的一点但是。如果我们要担心这一点,那么为什么我们不同样担心Object.prototype的其他方法(意外地)被覆盖?比如isPrototypeOf?在Axel的书和其他地方,我只看到了关于hasOwnProperty的建议,而没有看到关于其他的建议。可能是因为
hasOwnProperty
是常用的原型方法之一。同样的规则也应该适用于isPrototypeOf
。从链接问题的顶部回答:“通常,开发人员会使用对内置类型的调用来确保他们获得的是正确的方法本机行为,而不是某些重写的行为。”此语句包括所有方法,而不仅仅是hasOwnProperty
。谢谢,我认为同样的规则或最佳实践也应该适用于iProtoTypeof,但我读过的书和文章中没有一本提到除了hasOwnProperty之外的任何其他方法。那么,这种方法有什么特别之处呢?它的使用是否比iProtoTypeof更多?这些书和文章真的打算暗示你应该对所有的Object.prototype方法都这样做吗(…那么他们为什么不这么说?…)?是不是一些历史问题,首先存在的是私有财产,并且经常引起问题,所以它被提及而不是另一个@要回答“那他们为什么不这么说呢?”,这取决于“他们”是谁;您需要向我们展示一本书中的一段引文,该书只说您应该为hasOwnProperty
这样做。我引用的答案更为笼统,也适用于其他方法。当以这种方式提及时,hasOwnProperty
的原因可能是心理上的。此方法的目的是测试属性是否属于对象或其原型链,因此人们自然会怀疑hasOwnProperty
本身是否属于对象或原型链。一旦你怀疑这一点,很容易推断出,如果它确实属于对象本身,那么它大概不会做你想做的事情。