2011-05-11 113 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() {} 

};