js中的new操作符原理

举一个很常见的例子

function Person(name){
  this.name = name;
} Person.prototype.say
= function(){ console.log(this.name); } let p = new Person("花花"); p.say(); //花花

 

为什么会打印出“花花”?为什么构造函数中的 this 就指向了 对象?

这就是 new 的原理起的作用:

1、创建一个类的实例:创建一个空对象obj,然后把这个 obj 对象的 __proto__ 设置为Person.prototype;即创建一个继承自Person.prototype的新对象

2、执行构造函数:执行的时候,相应的参数会被传入,this 会被指定为第1步创建的新实例;

3、返回对象:如果构造函数返回了一个新对象,那么这个新对象会取代步骤1中new出来的实例被返回。如果构造函数没有返回对象,那么new出来的结果为步骤1创建的对象

New实现

function New(Person){
    var obj = {'__proto__': Person.prototype};  //第一步
    return function() {
        Person.apply(obj, arguments); //第二步
        return obj; //第三步
    }
}

 

posted @ 2019-10-06 20:16  足迹#  阅读(508)  评论(0编辑  收藏  举报