javascript - JavaScript 中的原型(prototype)不好吗?

标签 javascript node.js prototype-programming

Felix's Node.js Style Guide它说:

Do not extend the prototypes of any objects, especially native ones. There is a special place in hell waiting for you if you don't obey this rule.

This article也让我质疑原型(prototype)的用途。如果您稍后要在代码中添加方法,为什么不直接在原始构造函数中添加呢?

那么,什么时候需要扩展对象的原型(prototype)?

最佳答案

不,原型(prototype)还不错。恰恰相反,JavaScript 是一种原型(prototype)语言,而原型(prototype)是您应该扩展对象的方式。

这句话是反对专门扩展 Object.prototype 的。不是“对象的原型(prototype)”。 JavaScript 中的 Everything 继承自 Object,因此弄乱它的原型(prototype)会影响一切。它打破了 for(var n in obj){ 循环,很烦人。

这是对原型(prototype)的唯一反对——它们出现在 for-in 循环中。除此之外,到目前为止,它们是在 JS 中扩展对象的最佳执行方式。

至于为什么——在构造函数中添加对象,说:

function myClass(){
    this.someMethod = function(){ ... }
}

意味着你将为类的每个实例都有一个单独的函数。通过原型(prototype)实现:

myClass.prototype.someMethod = function(){ ... }

表示该函数只会有一个副本。内存效率更高,并允许对语言进行热编辑。假设您要编辑 String.prototype,例如:

String.prototype.trim = function(){ ... }

如果你只是以某种方式将它添加到构造函数中,现有字符串将没有 .trim() 方法,因此代码:navigator.userAgent.trim()将不起作用,因为在添加 trim() 方法之前定义了 navigator.userAgent

那篇文章只是蒂姆的肛门和偏执狂。忽略它 :) 只要你不忘记键入 new myClass() 而不仅仅是 myClass(),你就不会有任何问题。

关于javascript - JavaScript 中的原型(prototype)不好吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5575478/

相关文章:

javascript - 基于原型(prototype)与基于类的继承

javascript - 使用 this 和 prototype 在 JavaScript 中定义类的方法有什么区别?

javascript - Jquery 插件从选项中获取选项

javascript - THREE.js 相机遵循特定路径

json - 如何从 NodeJS JSON 中的特定键获取值

node.js - 获取我自己的服务器的 IP 地址和位置,而不是访问用户的服务器

node.js - Mongoose - 查询获取文档的所有子文档

Javascript - 创建一个新的数组方法

javascript - 将复选框选中的值传递给脚本变量

javascript - Ajax 请求维基百科 API 问题