In Felix 的 Node.js 风格指南 http://nodeguide.com/style.html它说:
不要扩展任何原型
对象,尤其是本地对象。那里
地狱里有一个特殊的地方等待着
如果你不遵守这条规则。
本文 http://howtonode.org/prototypical-inheritance也让我质疑原型的用途。如果您稍后要在代码中添加方法,为什么不直接将其添加到原始构造函数中呢?
那么,什么时候需要扩展对象的原型呢?
不,原型还不错。恰恰相反,JavaScript 是一种原型语言,原型就是你的样子supposed来扩展对象。
报价反对延长Object.prototype
具体来说。不是“对象的原型”。一切在 JavaScript 中继承自Object
,所以弄乱它的原型会影响一切。它打破了for(var n in obj){
循环而且很烦人。
这是唯一反对原型的地方——它们出现在 for-in 循环中。除此之外,它们是迄今为止在 JS 中扩展对象的最佳执行方式。
至于为什么——在构造函数中添加对象,说:
function myClass(){
this.someMethod = function(){ ... }
}
意味着你将拥有seperate类的每个实例的函数。通过原型来完成:
myClass.prototype.someMethod = function(){ ... }
意味着该函数永远只有一份副本。内存效率更高,并且允许对语言进行热编辑。假设您要编辑 String.prototype,例如:
String.prototype.trim = function(){ ... }
如果您只是以某种方式将其添加到构造函数中,则现有字符串将不会具有.trim()
方法,所以代码:navigator.userAgent.trim()
不会工作,因为navigator.userAgent
在您添加之前定义trim()
method.
那篇文章只是蒂姆的肛门和偏执。忽略它:)只要你不忘记输入new myClass()
而不是仅仅myClass()
,你不会有任何问题。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)