Kev*_*gue 16 javascript node.js prototype-programming
不要扩展任何对象的原型,尤其是原生对象.如果你不遵守这条规则,地狱里有一个特殊的地方在等你.
这篇文章也让我质疑原型的用途.如果您稍后要在代码中添加方法,为什么不在原始构造函数中添加它?
那么,何时需要扩展对象的原型?
Mar*_*ahn 33
不,原型也不错.恰恰相反,JavaScript是一种原型语言,原型是你应该如何扩展对象.
该报价反对Object.prototype具体延伸.不是"对象的原型". JavaScript中的所有内容都是继承自的Object,所以搞乱它的原型会影响一切.它打破了for(var n in obj){循环,只是很烦人.
这是唯一反对原型的东西 - 它们出现在for-in循环中.除此之外,它们是BY FAR,是在JS中扩展对象的最佳表现方式.
至于为什么 - 在构造函数中添加对象,比如说:
function myClass(){
this.someMethod = function(){ ... }
}
Run Code Online (Sandbox Code Playgroud)
意味着你将为每个类的实例提供一个单独的函数.通过原型来做:
myClass.prototype.someMethod = function(){ ... }
Run Code Online (Sandbox Code Playgroud)
意味着只有该功能的一个副本.更高效的内存,并允许热门编辑语言.假设您要编辑String.prototype,例如:
String.prototype.trim = function(){ ... }
Run Code Online (Sandbox Code Playgroud)
如果你只是以某种方式将它添加到构造函数中,现有的字符串将没有该.trim()方法,因此代码:navigator.userAgent.trim()自从navigator.userAgent在添加trim()方法之前定义之后就不起作用了.
那篇文章只是蒂姆肛门和偏执狂.忽略它:)只要你不忘记输入new myClass()而不是只是myClass(),你就不会有任何问题.