JavaScript

时间:2016-01-20 16:24:21

标签: javascript object module

我阅读了一些有关模块化JavaScript编程的信息,但是我无法找到new function () {}声明的优势。

下面两个声明的主要区别是什么:

var obj = {};
obj.calculate = new function () {};

obj.calculate = function () {};

我想,如果有人可以用例子来解释。当然,网上有很多信息,但我没有找到一个可以简单解释的例子(附例子)。

2 个答案:

答案 0 :(得分:1)

如果将语法与命名函数进行比较,则语法更容易理解。如果f是一个函数,

  • ffunction(){}比较;这只是对函数的引用。
  • f(x)function(){}(x)比较;这是一个带参数的函数调用。
  • new fnew 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.valuevalue是[{1}}对象的参数。

obj.calculate

除非您通过var obj = {}; obj.calculate = function () { this.value = "string"; }; 执行分配给value的功能,否则您无法访问obj.calculate。执行后obj.caluculate()成为value而不是obj的参数。