function Person(name, age, sex) {
this.name = name;
this.age = age;
this.sex = sex;
this.sayName = function() {
return this.name;
}
}
let per = new Person("sean", 26, "man");
console.log(per.name);
new 操作做了什么?
- 创建一个空对象。
- 将空对象的proto指向构造函数的原型。
- 将构造函数的this对象指向新对象,这样新对象就可以访问构造函数中的属性和方法。
- 如果构造返回值是一个对象就返回该对象,否则返回新对象。
手动实现new
function newObj() {
let obj = Object.create(null); //1.创建一个空对象
let constructor = Array.prototype.shift.call(arguments); //获取构造函数
obj.__proto__ = constructor.prototype; //2.将空对象的__proto__指向构造函数的原型
let ret = constructor.apply(obj, arguments);//执行构造函数
return typeof ret == 'object' ? ret : obj;//3.返回
}