gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 23:00:49 26 4
gpt4 key购买 nike

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com