关于javascript中的new

想请教一下各位,
这段代码为何返回的不是2?

var B=function(obj){
    if(obj){
        return obj;
    }
}
console.log(new B(2))  //输出:B{}

,而如果参数是引用类型就会返回参数,呵呵

console.log(new B([1,2,3]))  //输出:[1,2,3]
阅读 3.9k
4 个回答

JS就是这样的,当构造函数中没用return时返回this,有return且返回的为对象时返回该对象,否则仍然返回this

JS使用new实现创建对象,大致3步:
1.obj=new Object();
2.constructor.call(obj);
3.obj.prototype=constructor.prototype
默认返回obj;如果需要返回自定义数据,必须是对象,你只是返回一数值类型,所以只是一个对象{};如果要返回2,需要使用
return {num:2};就会返回这个对象

new 出来的一定是object啊。

可以这么来理解,第一次你输入的是2,2是一个纯粹最基本基础类型。(他不是对象),所以你将2传入的时候,因为在B这个函数中并没有赋初值,所以,这个函数就直接当成构造函数,就创建了一个空对象。而你传入一个数组的时候,因为数组也是一个对象,所以返回数组。还有就是,new这个关键字在js中其实并没有像其他面向对象语言一样实例化了一个对象(因为js本身没有类,而全是对象),而只是创建了一个空对象(如果有赋初值就赋予对象中的属性)。

推荐问题
宣传栏