我阅读了一些有关模块化JavaScript编程的信息,但是我无法找到new function () {}
声明的优势。
下面两个声明的主要区别是什么:
var obj = {};
obj.calculate = new function () {};
和
obj.calculate = function () {};
我想,如果有人可以用例子来解释。当然,网上有很多信息,但我没有找到一个可以简单解释的例子(附例子)。
答案 0 :(得分:1)
如果将语法与命名函数进行比较,则语法更容易理解。如果f
是一个函数,
f
与function(){}
比较;这只是对函数的引用。f(x)
与function(){}(x)
比较;这是一个带参数的函数调用。new f
与new function(){}
比较;这称为构造函数。new f(x)
与new function(){}(x)
比较;这会调用带参数的构造函数。在下一个例子中,有一个名为MyFunction的函数,它存储在f1中,还有一个匿名函数,存储在f2中。
function MyFunction() {
console.log("This is a normal function.")
}
var f1 = MyFunction;
var f2 = function() {
console.log("This is an anonymous function.")
}
console.log("f1 is a", typeof f1)
// f1 is a function
console.log("f2 is a", typeof f2)
// f2 is a function
在下一个例子中,有一个名为MyConstructor的构造函数,它用于创建一个新对象o1,以及一个匿名构造函数,用于创建一个新对象o2。
function MyConstructor() {
console.log("This is a constructor.")
this.member = "created with MyConstructor"
}
var o1 = new MyConstructor;
var o2 = new function() {
console.log("This is an anonymous constructor.")
this.member = "created with an anonymous constructor"
}
console.log("o1 is an", typeof o1, o1.member)
// "o1 is an object created with MyConstructor"
console.log("o2 is an", typeof o2, o2.member)
// "o2 is an object created with an anonymous constructor"
答案 1 :(得分:0)
var obj = {};
obj.calculate = new function () { this.value = "string"; };
现在,您可以使用value
访问obj.calculate.value
,value
是[{1}}对象的参数。
obj.calculate
除非您通过var obj = {};
obj.calculate = function () { this.value = "string"; };
执行分配给value
的功能,否则您无法访问obj.calculate
。执行后obj.caluculate()
成为value
而不是obj
的参数。