2011-05-11 112 views
4

我對在構造函數中聲明函數的不同方法感到困惑。Javascript構造函數中的函數聲明的差異

function ClassName() { 
this.one = function() {}; 
var two = function() {}; 
three = function() {}; 
} 

我知道一個是公開的,可以由外部調用和是私人的。什麼是三個的語義?

+1

不錯的點是666 ... ...有趣 – Ibu 2011-05-11 05:55:39

回答

1

您提供的示例將是一個語法錯誤,因爲您需要在該上下文中使用=進行分配。

three如果與正確的賦值運算符一起使用,將是一個全局函數,該函數將存在於該範圍之外。當您省略關鍵字var時,該變量將被分配全局對象的屬性,該屬性在瀏覽器中爲window

jsFiddle

使用var時,它們成爲執行上下文中的VariableObject的屬性。你用它們作爲正常變量。

Further Reading

+0

謝謝!這清除了它。我認爲它仍然是外部功能的一部分。 jsFiddle非常整潔。 – 2011-05-11 05:53:18

1

這是第一種格式

這與其他編程語言中的靜態方法相近。

var ClassName = { 
    one: function() {}, 
    two: function() {}, 
    three: function() {} 
} 

例如:

ClassName.one(); 

,另一個是:

function ClassName(){ 
    this.one = function() {}; 
    this.two = function() {}; 
    this.three = function() {}; 
} 

在這裏你可以這樣做:

var obj = new ClassName(); 
obj.one(); 

在這種情況下,你需要之前實例化對象使用這些方法。

這些是JavaScript中的兩種方法...我知道的。

+0

在對象文字中使用逗號之間的逗號,而不是分號。 – Guffa 2011-05-11 06:00:44

+0

謝謝@Guffa你是對的 – Ibu 2011-05-11 06:02:46

1

這些都是你可以在構造函數中使用的:

function ClassName() { 

    // A function assigned to a property 
    this.one = function() {}; 

    // A function assigned to a local variable 
    var two = function() {}; 

    // A function declared locally 
    function three() {} 

} 

只有第一個爲對象的成員結束。

這些都是你可以在對象文本使用的:

var objectName = { 

    // A function assigned to a property 
    one: function() {} 

};