2015-10-19 74 views
1

样本函数声明函数:为什么函数在构造函数中声明时不使用new关键字?

function Rectangle(height, width) { 
    this.height = height; 
    this.width = width; 
    this.calcArea = function() { 
     return this.height * this.width; 
    }; 
    // put our perimeter function here! 
    this.calcPerimeter = function() { 
    return 2 * this.height + 2 * this.width; 
}; 

样品新的函数声明:

var actions = new function() { 
    console.log("this is to do something"); 
} 

为什么我们使用new关键字,同时宣布了新的功能,但同时在构造函数中声明它不使用new关键字? ?

+0

'行动'没有在这里声明为一个函数。 – Bergi

+3

'new'关键词没有达到你认为的那样。 – Pointy

+1

你在哪里看到'var actions = new function(){...}'? –

回答

0

new是一个运营商。它分配一个对象实例(并为其分配一个原型)。您创建的函数不是任何类的实例,也不会创建为多个副本。静态声明定义了将存在的唯一实例。

+0

函数是Function类的实例,它们是在每个函数定义上创建的。不确定这里的“静态声明”是什么意思。 – Bergi

+0

函数不是动态分配的 - 它们是通过声明创建的。 (至少,它们不会比任何'var'动态分配)。您不会创建'calcPerimiter'函数来执行程序中的某个任务,然后创建27个不同的calcPerimiter对象。只有一个。它占据了一块记忆。如果你想以某种方式制作27个独立的副本,那么'new'关键字就是合适的。 –

+1

每个被评估的函数表达式实例化一个新的函数实例。该函数的*代码*可能只存在一次,但肯定有一个新的函数对象在每次评估表达式时创建。 – Pointy

相关问题