JavaScript 的 new

JavaScript 的 new

JavaScript是一门基于原型的语言,但它却拥有一个 new 操作符使得其看起来象一门经典的面对对象语言。那样也迷惑了程序员们,导致一些有问题的编程模式。

其实你永远不需要在JavaScript使用 new Object()。用字面量的形式{}去取代吧。

同理,不要使用 new Array() ,而代之以字面量[]。JavaScript中的数组并不象Java中的数组那样工作的,使用类似Java的语法只会让你糊涂。

同理不用使用 new Number, new String, 或者 new Boolean。这些的用法只会产生无用的类型封装对象。就直接使用简单的字面量吧。

不要使用 new Function 去创建函数对象。用函数表达式更好。比如:

frames[0].onfocus = new Function(”document.bgColor=’antiquewhite’”)

更好的写法是:

frames[0].onfocus = function () {document.bgColor = ‘antiquewhite’;};

第二种形式让脚本编译器更快的看到函数主体,于是其中的语法错误也会更快被检测出来。有时候程序员使用 new Function 是因为他们没有理解内部函数是如何工作的。

selObj.onchange = new Function(”dynamicOptionListObjects[”+
        dol.index+”].change(this)”);

如果我们让用字符串做函数体,编译器不能看到它们。如果我们用字符串表达式做函数体,我们同样也看不到它们。更好的方式就是不要盲目编程。通过制造一个返回值为函数的函数调用,我们可以明确的按值传递我们想要绑定的值。这允许我们在循环中初始化一系列 selObj 对象。

selObj.onchange = function (i) {
    return function () {
        dynamicOptionListObjects[i].change(this);

    };
}(dol.index);

直接对一个函数使用new永远不是一个好主意。比如, new function 对构造新对象没有提供什么优势。

myObj = new function () {
    this.type = ‘core’;
};

更好的方式是使用对象字面量,它更轻巧,更快捷。

myObj = {
    type: ‘core’
};

假如我们需要创建的对象包含的方法需要访问私有变量或者函数,更好的方式仍然是避免使用new.var foo = new function() {
    function processMessages(message) {
        alert(”Message: ” + message.content);
    }
    this.init = function() {
        subscribe(”/mytopic”, this, processMessages);
    }
}通过使用 new 去调用函数,对象会持有一个无意义的原型对象。这只会浪费内存而不会带来任何好处。如果我们不使用new,我们就不用在对象链维护一个无用的prototype对象。所以我们可以用()来正确的调用工厂函数。var foo = function () {
    function processMessages(message) {
        alert(”Message: ” + message.content);
    }
    return {
        init: function () {
            subscribe(”/mytopic”, this, processMessages);
        }
    };
}();所以原则很简单: 唯一应该要用到new操作符的地方就是调用一个古老的构造器函数的时候。当调用一个构造器函数的时候,是强制要求使用new的。有时候可以来new一下, 有的时候还是不要了吧。
 

new 运算符在 JavaScript 中用于实例化一个类并创建一个对象。尽管 JavaScript 中的所有东西都是对象,但通过 new 运算符来创建对象有其特殊的作用。使用 new 运算符后,JavaScript 引擎会进行一系列的步骤来完成对象的创建和初始化。 具体来说,使用 new 运算符时,JavaScript 引擎会执行以下步骤: 1. 创建一个新的空对象。 2. 将新对象的原型指向类的原型对象,以便实现继承。 3. 将类的构造函数作为方法来调用,并将新对象作为构造函数的上下文(即 this)。 4. 如果构造函数返回一个对象,则返回该对象;否则,返回新创建的对象。 简言之,new 运算符通过使用类的构造函数来创建一个新对象,并且确保该对象具有正确的原型链和上下文。 引用中提到了 new 运算符的作用和意义,它允许我们在 JavaScript 中创建一个对象,这样我们可以根据类的定义来实例化对象。引用中给出了一个伪代码示例,展示了 JavaScript 引擎在执行 new 运算符时的工作流程。引用进一步建议了如何加深对 new 运算符的理解。 总结起来,JavaScript 中的 new 运算符用于实例化一个类并创建一个对象,它通过一系列步骤来完成对象的创建和初始化,确保对象具有正确的原型链和上下文。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [JS核心系列:理解 new 的运行机制](https://blog.csdn.net/gongzhuxiaoxin/article/details/52625842)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值