JavaScript 中的原型不好吗?

2024-01-05

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(使用前将#替换为@)

JavaScript 中的原型不好吗? 的相关文章

随机推荐