创建一个新的空对象:
[[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
的对象。