new运算符的执行原理
new操作符实现原理:
function news(func) {
var target = {};//生成新对象
target.__proto__ = func.prototype;//实例的__proto__指向原型,构造函数的prototype也指向原型(链接到原型)
var res = func.call(target);//把函数的this绑定在了新生成的对象中
if (typeof (res) == "object" || typeof (res) == "function") {
return res;//如果传入的函数(构造函数)有自己的返回值,则返回该值
}
return target;//如果如果传入的函数(构造函数)没有自己的返回值,则返回新对象
}
new运算符的执行过程
function Person(){
this.name=name;
}
以 var p=new Person()为例
- 生成一个新的空对象
- 并且这个对象的__proto__属性指向构造函数的prototype属性
- 绑定this值:
var res=Person.call(target,'lxt');
相当于var res=target.Person('lxt')
res是返回值 - 返回对象,如果构造函数有自己的返回值就返回该值,如果没有则返回新建的对象。