Javascript构造函数中函数声明的差异

时间:2011-05-11 05:44:06

标签: javascript oop

我对在构造函数中声明函数的不同方法感到困惑。

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

我知道一个是公开的,可以由外部调用,两个是私有的。 的语义是什么?

3 个答案:

答案 0 :(得分:1)

您提供的示例将是语法错误,因为您需要在该上下文中使用=进行分配。

three如果与正确的赋值运算符一起使用,将是一个存在于该范围之外的全局函数。省略var关键字时,会为变量分配全局对象的属性,即浏览器中的window

jsFiddle

使用var时,它们将成为执行上下文中 VariableObject 的属性。您可以将它们用作普通变量。

Further Reading

答案 1 :(得分: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中的类的两种方式......我知道。

答案 2 :(得分: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() {}

};