仅仅向对象声明函数会导致其调用
var a = {};
a.xyz = new function() {
alert("dosomething");
}
a.xyz
:
a.xyz();
我的假设出了什么问题?
答案 0 :(得分:3)
删除新内容,一切都会好起来的:
var a = {};
a.xyz = function() {
alert("dosomething");
}
JSFiddle: http://jsfiddle.net/vnj8pzm1/
编辑:有关IIFE的更多信息 - Immediately-Invoked Function Expression (IIFE)
答案 1 :(得分:3)
当你将new
放在函数定义的前面时,你的函数会被立即调用为构造函数。
正如冰上所述,你不应该在你的功能定义面前new
。但是,评论中提到的无冰是不正确的
new function(){}或new function(){}();将调用函数,就像function(){}();或(function(){}());
new function() {}
将创建一个匿名类型的新实例,因此在您的代码中a.xyz
是一个对象
如果将其更改为function(){}()
,它将立即执行该函数并且不返回任何内容。见http://jsfiddle.net/mendesjuan/kzhg9ggu/
答案 2 :(得分:3)
new运算符使用new创建对象的实例,这就是为什么在声明之后立即执行。
xyz= function(){};
将对匿名函数的引用放入xyz并指向函数。
xyz= new function(){};
对新构造的匿名构造函数实例进行引用,因此它将指向一个对象。试试typeof new function(){}
你会得到一个对象。
执行代码new function(){alert('foo');}
时,会发生以下情况: