创建一个新的空对象:
[[Prototype]] 设置为构造函数的 prototype 属性。将构造函数的 this 指向这个新对象:
this 关键字,初始化新对象。执行构造函数代码:
返回新对象:
null 的对象),则 new 表达式的值就是这个对象。否则,返回上面创建的新对象。假设有一个构造函数 Person:
function Person(name, age) {
this.name = name;
this.age = age;
}
Person.prototype.sayHello = function() {
console.log(`Hello, my name is ${this.name}`);
};
使用 new 操作符来创建 Person 的实例:
let person1 = new Person('Alice', 30);
下面是 new Person('Alice', 30) 具体执行的步骤:
创建一个新对象:
let newObj = {};
将新对象的 [[Prototype]] 设置为构造函数的 prototype 属性:
newObj.__proto__ = Person.prototype;
将构造函数的 this 指向这个新对象,并执行构造函数代码:
let result = Person.call(newObj, 'Alice', 30);
返回新对象:
null),则返回该对象:
if (typeof result === 'object' && result !== null) {
return result;
}
newObj:
return newObj;
function Person(name, age) {
this.name = name;
this.age = age;
}
Person.prototype.sayHello = function() {
console.log(`Hello, my name is ${this.name}`);
};
let person1 = new Person('Alice', 30);
person1.sayHello(); // Hello, my name is Alice
console.log(person1 instanceof Person); // true
console.log(person1 instanceof Object); // true
在这个例子中:
new Person('Alice', 30) 创建了一个新对象 person1。Person.prototype,因此 person1 可以访问 Person.prototype 上定义的属性和方法。Person 初始化了 person1 的 name 和 age 属性。new 操作符创建一个新对象。this 绑定到这个新对象。null 的对象。