JS new做了什么
function Person (name,age) {
this.name = name;
this.age = age;
}
Person.prototype.getName = function(){
console.log('my name is ' + this.name);
}
let person = new Person("xiaohei",18);
console.log(person);
person.getName();//my name is xiaohei
使用关键字new创建新实例对象经过了以下几步:
- 创建一个新对象
- 将新对象的_proto_指向构造函数的prototype对象
- 将构造函数的作用域赋值给新对象 (也就是this指向新对象)
- 执行构造函数中的代码(为这个新对象添加属性)
- 返回新的对象
function Person (name,age) {
this.name = name;
this.age = age;
}
Person.prototype.getName = function(){
console.log('my name is ' + this.name);
}
function createPerson(name,age,sex){
let obj = {};// 创建一个新对象
obj.__proto__ = Person.prototype;//将新对象的_proto_指向构造函数的prototype对象
Person.call(obj,name,age,sex);//改变this指向,并执行函数内代码
return obj;//返回对象
}
let person = new Person("xiaohei", 18);
let person2 = createPerson("xiaobai", 19);
console.log(person,person2);
person.getName();//my name is xiaohei
person2.getName();//my name is xiaobai