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个例子
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
new的过程实际上分三步。1,创建一个以这个函数为原型的空对象.
2,将函数的
prototype赋值给对象的__proto__属性3,将对象作为函数的
this传进去。如果有return出来东西是对象的话就直接返回return的内容,没有的话就返回创建的这个对象写成代码就是如下:
new Fun()会进行几个步骤:
1、创建一个空对象,并且 this 引用该对象,同时还继承了该函数的原型。
2、this.name 这种属性和方法被加入到 this 引用的对象中。
3、该函数有return,如果有,但是返回值是基本类型(Number,String,Boolean,undefined,null)时,会忽略掉此return并返回this(this引用的对象),如果返回值是引用类型(对象),则返回该对象,this会被忽略
4、该函数没有return,则默认返回this引用的对象
不同语言不同,大部分都是分配新的符号空间信息。