search

Home  >  Q&A  >  body text

关于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]
PHP中文网PHP中文网2822 days ago341

reply all(4)I'll reply

  • 伊谢尔伦

    伊谢尔伦2017-04-10 17:05:06

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

    reply
    0
  • ringa_lee

    ringa_lee2017-04-10 17:05:06

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

    reply
    0
  • 高洛峰

    高洛峰2017-04-10 17:05:06

    new 出来的一定是object啊。

    reply
    0
  • 大家讲道理

    大家讲道理2017-04-10 17:05:06

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

    reply
    0
  • Cancelreply