2011-11-30 79 views
0

任何人都可以告訴我,如果以下示例類與類屬性相同。一個是在建築師內部定義的,另一個在外部。Javascript類屬性

實施例1對

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

實施例2

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

Test.WELCOME = "Hello ; 

我已經使用所述第二類型但兩者似乎工作。

乾杯

+2

'class'?在JavaScript中? –

+0

相關:[Javascript中的類關鍵字](http://stackoverflow.com/questions/1728984/class-keyword-in-javascript)。 Zoso - 這個JavaScript運行在哪裏? (可能不是瀏覽器) – Kobi

+0

,除非你在某個非常早期的ES.Next alpha引擎中,在javascript中沒有使用'class'關鍵字。 – jAndy

回答

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中,您將將只分配一次該屬性。

+0

謝謝你。 – ZosoOfZep

2

我很確定這些都不是你真正想要它做的。使用new實例化Test時,通常的方法this是有用的。使用x = new Test('someinput'),在Test上設置屬性本身對由其創建的對象沒有任何影響。你想要做的是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' 
+0

如果您使用原型,則每個對象都有一個WELCOME實例。如果按照我的示例使用它,那麼屬性與「類」而不是實例關​​聯。 – ZosoOfZep

+0

不正確。每個使用'new'創建的實例都會引用一個單獨的'__proto__'。該財產將只存在於一個地方。 'Test'是構造函數,它不在'[[proto]]'樹中。與Object.prototype相比,查看Object中的函數。然後查看'var'在執行'var x = {};'時隱藏的方法''。 – 2011-11-30 12:41:54

+0

我明白每個對象都有一個原型對象。原型的所有屬性都將顯示爲對象的屬性。如果你看看我的例子的一個實例,WELCOME將不會是其中一個屬性。你只能通過類名來訪問它。 – ZosoOfZep