Javascript类属性

时间:2011-11-30 11:25:27

标签: javascript

关于类属性,是否可以告诉我以下示例类是否等效。一个在构造函数中定义,一个在外部定义。

示例1

function Test(input)
{
    this.output = input ;
    Test.WELCOME = "Hello ;
}

示例2

function Test(input)
{
    this.output = input ;        
}

Test.WELCOME = "Hello ;

我一直在使用第二种类型,但两者似乎都有用。

干杯

2 个答案:

答案 0 :(得分:2)

假设你的意思是:

function Test(input)
{
  this.output = input;
  Test.WELCOME = "Hello";
}

示例2

function Test(input)
{
  this.output = input ;        
}
Test.WELCOME = "Hello";

然后在任何new Test对象的属性方面没有区别,但是在示例1中,您将在每次调用时为WELCOME函数分配Test属性方法,而在示例2中,您将只分配此属性一次。

答案 1 :(得分:2)

我很确定这些都不是你真正希望它做的。 this内部Test的常用方法是使用new实例化它时有用的东西。在Test上设置属性本身对使用x = new Test('someinput')从其创建的对象没有任何影响。你想要做的是Test.prototype.WELCOME = 'Hello'Test的实例会在[[proto]]树中拥有该属性,然后才能使用它。

function Test(input){
  this.output = input;
}
Test.prototype.WELCOME = 'Hello';

var instanceOfTest = new Test('whatever');

// produces this structure:
instanceOfTest => {
  output: 'whatever',
  __proto__: {
    WELCOME: 'Hello'
  }
}

console.log(instanceOfTest.WELCOME); // 'Hello'