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