在另一个问题中,用户指出该new
关键字使用很危险,并提出了不使用该对象创建对象的解决方案new
。我不相信这是真的,主要是因为我使用了Prototype,Scriptaculous和其他出色的JavaScript库,并且每个人都使用了new
关键字。
尽管如此,昨天我还是在DouglasCrockford在YUI剧院观看了一次演讲,他说的一模一样,他new
不再在代码中使用关键字(JavaScript上的Crockford-ActIII:终极功能-50:23分钟)。
使用new
关键字是否“不好” ?使用它的优缺点是什么?
Crockford在推广良好的JavaScript技术方面做了很多工作。他对语言关键要素的自以为是的态度引发了许多有用的讨论。就是说,太多的人把每一个“坏”或“有害”的宣告当作福音,拒绝超越一个人的视线。有时可能会令人沮丧。
new
与从头开始构建每个对象相比,使用关键字提供的功能具有多个优点:
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");
(请注意,此代码段能够避免对构造函数名称进行硬编码,因为与前面的示例不同,它无需实际实例化对象-因此,可以将其复制到每个目标函数中,而无需进行修改。)
问题内容: 在JavaScript中的关键字可能会相当混乱首次遇到它的时候,人们往往会认为JavaScript是不是面向对象的编程语言。 它是什么? 它解决什么问题? 什么时候合适,什么时候不合适? 问题答案: 它做五件事: 它创建一个新对象。这个对象的类型就是 object 。 它将这个新对象的内部不可访问的 [[prototype]] (即 proto )属性设置为构造函数的外部可访问 原型
问题内容: 我来自C ++,所以我不太了解Java的一项功能。我已经读过,除原始元素外,所有对象都必须使用关键字创建。现在,如果编译器可以识别原始类型,并且不允许您创建一个不带构造函数的对象,那么为什么根本没有关键字呢?有人可以提供一个示例,说明两行代码,除了存在的,相同,编译且具有不同的含义/结果之外,相同吗? 只是为了澄清我的意思是多余,并希望使我的问题更清楚。是否添加任何东西?语言是否可以通
本文向大家介绍谈谈JavaScript的New关键字,包括了谈谈JavaScript的New关键字的使用技巧和注意事项,需要的朋友参考一下 原型和闭包算是JavaScript中最常见,最难以理解,最容易被当做问题的两个部分,当然还有它们的延伸,如作用域链,继承等等吧,我最近也是各种看,各种翻,记录点自己的心得,写写总会让自己的理解更深一些。(跟标题的关系不大啦,就感慨句,每次总感觉自己懂了,再翻还
问题内容: 以下代码是做什么的: 构造函数在哪里,我想用新函数扩展Widget的“类” 。 什么是 关键词在那里做,如果它被省略了,会发生什么? 问题答案: WeatherWidget.prototype = new Widget; 该关键字调用构造函数,返回值分配给属性。(如果省略,除非添加了参数列表,否则将不会调用。但是,以这种方式调用可能是不可能的。如果它不是严格的模式代码并且实现是,则肯定
问题内容: 我正在网上关注Java教程,尝试学习该语言,并且它在使用数组的两种语义之间反弹。 和: 该教程从未真正提到过为什么它会在两者之间来回切换,所以我对该主题进行了一些搜索。我目前的理解是,操作员正在创建“ longs数组”类型的对象。我 不 明白的是为什么我要那个,那有什么后果? 是否存在某些特定于“数组”的方法,除非它是“数组对象”,否则这些方法对数组不起作用? 有什么我 不能 用普通数
我注意到,implements在JavaScript中是一个保留关键字。然而,我还没有发现该关键字的任何用法。事实上,我知道JavaScript中没有接口的概念,这与Java等其他编程语言不同,Java在实现接口时使用