javascript初始化不带new关键字的对象

javascript初始化不带new关键字的对象,javascript,Javascript,这两者之间的区别是什么: function Foo(){} var foo1 = Foo(); 及 据我测试,foo1没有给出任何结果。TypeOfFoo1未定义,而使用new时,它与预期一样正常 没有new关键字我得到未定义结果的原因是什么?这是因为function Foo(){}隐式返回undefined,即如果函数没有显式的return语句,编译器/VM将隐式添加它。但是,当您使用new关键字时,您将从构造函数实例化一个对象 有关new关键字作用的确切解释,请参阅。这是因为functio

这两者之间的区别是什么:

function Foo(){} var foo1 = Foo();

据我测试,foo1没有给出任何结果。TypeOfFoo1未定义,而使用new时,它与预期一样正常


没有new关键字我得到未定义结果的原因是什么?

这是因为
function Foo(){}
隐式返回
undefined
,即如果函数没有显式的return语句,编译器/VM将隐式添加它。但是,当您使用
new
关键字时,您将从构造函数实例化一个对象


有关
new
关键字作用的确切解释,请参阅。

这是因为
function Foo(){}
隐式返回
undefined
,即如果函数没有显式返回语句,编译器/VM将隐式添加它。但是,当您使用
new
关键字时,您将从构造函数实例化一个对象

有关
新的
关键字的确切说明,请参阅。

试试这个

function Foo(){} var foo1 = Foo();
而不是

function Foo(){} var foo1 = foo();
JavaScript是区分大小写的语言

试试这个

function Foo(){} var foo1 = Foo();
而不是

function Foo(){} var foo1 = foo();

JavaScript是区分大小写的语言

下面是您在使用
new
时基本上发生的情况,它:

  • 创建一个新对象,让它成为
    o
  • o
    的原型链接设置为
    [构造函数].prototype
  • o
    作为上下文对象(
    this
    )执行
    [constructor]
  • 返回
    o
    ,除非
    [constructor]
    返回非原语值。在这种情况下,将返回该非原语值,而不是
    o
    。(添加了@Esailija建议的这些精度)
  • 如果不使用
    new
    ,则不会发生这种情况,并且上下文对象是
    window
    ,除非该函数是在另一个对象上调用的。在这种情况下,上下文对象就是该对象

    例如

    每个
    函数
    都可以是JavaScript中的构造函数,但是必须使用
    new
    关键字才能获得预期的结果

    为了避免错误,有些人会设计他们的函数,这样忘记
    new
    关键字就不会有害了,如下所示,但是有更好的方法来检测这些错误,比如使用类似的代码分析工具

    例如


    下面是您在使用
    new
    时的基本情况,它:

  • 创建一个新对象,让它成为
    o
  • o
    的原型链接设置为
    [构造函数].prototype
  • o
    作为上下文对象(
    this
    )执行
    [constructor]
  • 返回
    o
    ,除非
    [constructor]
    返回非原语值。在这种情况下,将返回该非原语值,而不是
    o
    。(添加了@Esailija建议的这些精度)
  • 如果不使用
    new
    ,则不会发生这种情况,并且上下文对象是
    window
    ,除非该函数是在另一个对象上调用的。在这种情况下,上下文对象就是该对象

    例如

    每个
    函数
    都可以是JavaScript中的构造函数,但是必须使用
    new
    关键字才能获得预期的结果

    为了避免错误,有些人会设计他们的函数,这样忘记
    new
    关键字就不会有害了,如下所示,但是有更好的方法来检测这些错误,比如使用类似的代码分析工具

    例如

    请参阅了解新关键字请参阅了解新关键字
    function Foo(args) {
        if (!(this instanceof Foo)) {
            return new Foo(args);
        }
        //initialization code
    }