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
}