微信公众号
扫描关注微信公众号
博客大厅

new 操作符具体干了什么?

原创 来源:博客站 阅读 0 01月21日 10:28 听全文

在 JavaScript 中,new 操作符用于创建一个由构造函数定义的对象实例。具体地说,当你使用 new 操作符调用一个构造函数时,它会执行以下步骤:

  1. 创建一个新的空对象: 首先,创建一个新的空对象,并将其原型 (__proto__) 设置为构造函数的 prototype 属性。

    let newObject = {};
    newObject.__proto__ = ConstructorFunction.prototype;
    
  2. 绑定 this 并执行构造函数: 然后,调用构造函数,并将 this 绑定到新创建的对象上。这意味着构造函数内部的 this 指向新创建的对象。

    ConstructorFunction.call(newObject, ...args);
    

    这里,...args 表示传递给构造函数的参数。

  3. 返回新对象: 如果构造函数没有显式返回一个对象(即返回的不是一个对象类型),则默认返回新创建的对象。如果构造函数显式返回一个对象,则 new 操作符会返回这个显式返回的对象。

    if (typeof result !== 'object' || result === null) {
        return newObject;
    } else {
        return result;
    }
    

示例

以下是一个使用 new 操作符创建对象的示例:

function Person(name, age) {
    this.name = name;
    this.age = age;
    this.greet = function() {
        console.log(`Hello, my name is ${this.name} and I am ${this.age} years old.`);
    };
}

let person1 = new Person('Alice', 30);
person1.greet(); // 输出: Hello, my name is Alice and I am 30 years old.

console.log(person1 instanceof Person); // 输出: true
console.log(person1.__proto__ === Person.prototype); // 输出: true

在这个例子中:

  1. new Person('Alice', 30) 创建了一个新的空对象,并将其原型设置为 Person.prototype
  2. Person 构造函数被调用,this 指向新创建的对象,因此 this.namethis.age 被设置为 'Alice'30
  3. 构造函数没有显式返回对象,因此 new 操作符返回新创建的对象。

注意事项

  • 如果构造函数显式返回一个对象,则 new 操作符会返回这个对象,而不是新创建的对象。
  • 使用 new 操作符创建的对象会继承构造函数的 prototype 属性上的方法和属性。
function CustomConstructor() {
    this.customProperty = 'custom value';
    return { explicitProperty: 'explicit value' };
}

let instance = new CustomConstructor();
console.log(instance.explicitProperty); // 输出: explicit value
console.log(instance.customProperty); // 输出: undefined,因为构造函数返回了一个显式对象

在这个例子中,由于 CustomConstructor 显式返回了一个对象,因此 new 操作符返回了这个显式对象,而不是新创建的对象。

学在每日,进无止境!更多精彩内容请关注微信公众号。
原文出处: 内容由AI生成仅供参考,请勿使用于商业用途。如若转载请注明原文及出处。
出处地址:http://www.07sucai.com/tech/140.html
版权声明:本文来源地址若非本站均为转载,若侵害到您的权利,请及时联系我们,我们会在第一时间进行处理。
>