function Person1(name) {
this.name = name;
}
function Person2(name) {
this.name = name;
return this.name;
}
function Person3(name) {
this.name = name;
return new Array();
}
function Person4(name) {
this.name = name;
return new String(name);
}
function Person5(name) {
this.name = name;
return function() {};
}
var person1 = new Person1('xl'); // {name: 'xl'}
var person2 = new Person2('xl'); // {name: 'xl'}
var person3 = new Person3('xl'); // []
var person4 = new Person4('xl'); // 'xl'
var person5 = new Person5('xl'); // function() {}
请问new操作符里面到底发生了什么?特别是第2个例子
new
的过程实际上分三步。1,创建一个以这个函数为原型的空对象.
2,将函数的
prototype
赋值给对象的__proto__
属性3,将对象作为函数的
this
传进去。如果有return
出来东西是对象的话就直接返回return
的内容,没有的话就返回创建的这个对象写成代码就是如下: