我们常用
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 {}