new操作符:
function Person(name,gender){
this.name = name;
this.gender = gender;
}
Person.prototype.sayName = function(){
console.log(this.name);
}
var lqw = new Person('lqw','male');
console.log(lqw.name); //lqw
lqw.sayName();//lqw
从上面可以看出
- new通过构造函数Person构建出来的实例可以访问构造函数中的属性
- new通过构造函数Person构建出来的实例可以访问构造函数原型链上的属性
注意两点:
- 如果构造函数中有返回原始值(如:return 1)不会生效;
- 如果构造函数中有返回对象(如:return {age:100}),那么new操作符没用
自己实现new操作符
分为4步:
1、创建新对象obj
2、链接到原型
3、绑定this
4、返回新对象
function myNew(Con, ...args)
{
let obj = {};
obj.__proto__ = Con.prototype;
let result = Con.apply(obj,args);
return result instanceof Object?result:obj;
}
测试一下:
const lqw2 = myNew(Person,['lqw2','男']);
console.log(lqw2.name); //lqw2
lqw2.sayName(); //lqw2