为什么在JavaScript中使用new和constructor函数是错误的
我看过一些文章和一些关于问题答案的主张,因此使用为什么在JavaScript中使用new和constructor函数是错误的,javascript,oop,prototype,Javascript,Oop,Prototype,我看过一些文章和一些关于问题答案的主张,因此使用new和构造函数是错误的,不应该使用 它们违背了JavaScript的原型本质 有人能告诉我一个情况吗?使用new和构造函数太糟糕了,不应该使用 使用new和constructor函数是错误的,不应使用 阅读-否,它不是。有几个(正确的)论点是正确的 因为隐藏了原型概念,所以新手很困惑。引述: [使用new]构造函数变得更简单。然而,它变得非常有趣 很难向一个知道的人解释原型遗传 没什么。要向一位专家解释这一点就更加困难了 知道古典遗产的人 当
new
和构造函数是错误的,不应该使用
它们违背了JavaScript的原型本质
有人能告诉我一个情况吗?使用new
和构造函数太糟糕了,不应该使用
使用new和constructor函数是错误的,不应使用
阅读-否,它不是。有几个(正确的)论点是正确的
- 因为隐藏了原型概念,所以新手很困惑。引述:
[使用
]构造函数变得更简单。然而,它变得非常有趣 很难向一个知道的人解释原型遗传 没什么。要向一位专家解释这一点就更加困难了 知道古典遗产的人new
- 当忘记
new
- 在少数情况下,纯
方法更干净Object.create
- 构建类层次结构是复杂且复杂的
new
的构造函数都是可行的
它们违背了JavaScript的原型本质
这永远不会改变。我很难想象为什么有人会批评这一点,原型继承远比类继承强大。可能他们只是在反对语法
有人能告诉我,使用新函数和构造函数是如此糟糕,以至于永远不应该使用它吗
不需要时不应使用。可以使用模块模式和对象文本轻松创建单例;继承在这里没有帮助。请参见示例。
new
只是程序员囊中的另一个工具——不要害怕在相关的地方使用它们。类似于eval
和with
(尽管后者的情况很少)。你能链接到那些文章吗?在Object.create
之前,确实没有什么东西可以替代new
,如果需要原型支持。@user2864740,MDN上有一个for Object.create,它使用至少十年前包装的模式(最初称为“克隆”)。也有直接分配给\uuuuu proto\uuuu
(在某些浏览器中),但这已经被其他方法所取代。@RobG The polyfill需要新的,而且\uuuu proto\uuuu
从未被远程标准化过。但是可以使用新的,而不用继承;并且使用原型“保存属性”(尽管在现代JS实现中可能不是有效的参数)。@user2864740:No.new
总是使用自定义继承链创建新对象-或者你是说new object
是指“无继承”?谢谢Bergi,很抱歉在这里发布此消息,但最近出现了关于文章或直接建议不要使用新消息的答案。也许我错过了一些新的开发,应该建议询问原型信息的用户不要使用新的,但我不这么认为。一个问题,包括我在这些语句中遇到的问题,已在@Bergi结束。下面的回答解决了OP的问题(在评论中给出了更正),然后继续使用“帮助器”函数,其好处是“使用它不需要理解原型”,并且有一个链接到文章,该链接将告诉您使用新的工具是不好的(两次)首先对你的答案发表评论DC文章的链接令人困惑,但有几处声称“经典继承”是不好的,还有DC如何使用它的链接,我确实评论说,使用的代码确实不好,但不是这样做的方式it@HMR:啊,你指的是-你可以直接指那里:-)事实上我认为他是对的。所有这些都是关于理解它是如何工作的——而new
对学习者没有帮助。然而,对于大师来说,这是一个强大的工具。因此,从中得出你自己的结论——你(和你的团队)准备好使用它了吗?