Javascript new发生了什么?

我们常用

function Student(name,age){
    this.name = name;
    this.age = age;
}
Student.prototype={
    getInfo:function(){
        return "学生姓名:"+this.name+" 学生年纪:"+this.age
    }
}
var student = new Student('xx',18); //Student {name: "xx", age: 18}

那么new发生了什么呢?小编在一个知乎的帖子上一个解释,觉得解释还是很不错的,做个记录,分享一下,以后如有更好解释再继续更新

//以上面的Student为例
var ob = new Object();           // 新建一个对象
ob.__proto__ = Student.prototype; //设置新对象的原型链
Object.call(ob);                  // 让Student的this指向实例ob,执行constructor函数。
sudent = ob                       //返回实例ob

当然,最后一步不只是返回实例。
首先判断Student的constructor有没有return,如果return值不是引用类型,就把新建的实例ob给student,否则,就把constructor的返回值给sdudent。

比如下面的情况,student是一个空对象Object {}。

function Student(name,age){
    this.name = name;
    this.age = age;
    return {};  //注意这里返回了一个引用类型
}
Student.prototype={
    getInfo:function(){
        return "学生姓名:"+this.name+" 学生年纪:"+this.age
    }
}
var student = new Student('xx',18);    //空对象 Object {}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值