JavaScript的“ new”关键字是否有害?

JavaScript的“ new”关键字是否有害?,第1张

JavaScript的“ new”关键字是否有害?

Crockford在推广良好的Javascript技术方面做了很多工作。他对语言关键要素的自以为是的态度引发了许多有用的讨论。就是说,太多的人把每一个“坏”或“有害”的宣告当作福音,拒绝超越一个人的视线。有时可能会令人沮丧。

new
与从头开始构建每个对象相比,使用关键字提供的功能具有多个优点:

  1. 原型继承。尽管基于类的OO语言的人们经常将怀疑和嘲笑混为一谈,但是Javascript的本机继承技术是一种简单且令人惊讶的有效代码重用方法。并且new关键字是使用它的规范方法(并且只有可用的跨平台方法)。
  2. 性能。这是#1的副作用:如果我想向创建的每个对象添加10个方法,我可以编写一个创建函数,将每个方法手动分配给每个新对象…或者,我可以将它们分配给创建功能,
    prototype
    并用于
    new
    标记新对象。这样不仅速度更快(原型上的每个方法都不需要代码),而且还避免了为每个方法使用单独的属性来膨胀每个对象。在较慢的机器(尤其是较慢的JS解释器)上,当创建许多对象时,这可能意味着可以节省大量的时间和内存。

是的,它

new
有一个关键的劣势,其他答案对此有很好的描述:如果您忘记使用它,您的代码将在没有警告的情况下中断。幸运的是,这种缺点很容易消除-
只需向函数本身添加一些代码即可:

function foo(){   // if user accidentally omits the new keyword, this will    // silently correct the problem...   if ( !(this instanceof foo) )      return new foo();   // constructor logic follows...}

现在,您可以拥有

new
不必担心因意外滥用而引起的问题的优点。如果对破坏代码的想法无声地起作用,您甚至可以在检查中添加一个断言。或者,如某些评论所述,使用检查来引入运行时异常:

if ( !(this instanceof arguments.callee) )    throw new Error("Constructor called as a function");

(请注意,此代码段能够避免对构造函数名称进行硬编码,因为与前面的示例不同,它无需实际实例化对象-因此,可以将其复制到每个目标函数中,而无需进行修改。)



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5060099.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-15
下一篇 2022-11-16

发表评论

登录后才能评论

评论列表(0条)

保存