2013-04-18 79 views
0

在JavaScript中定義對象時,有沒有辦法讓該對象的成員訪問同一對象的另一個成員的值?例如,如果我定義下面的(使用jquery)如何讓JavaScript對象的一個​​成員引用同一對象的另一個成員?

var x = $.extend({}, { 
    greeting: 'hello', 
    message: this.greeting+' world' 
}); 

alert(x.message); 

這上面的代碼將提醒undefined world。在定義期間如何使其值爲greeting。在這種情況下,預期的輸出是hello world

+0

相關:http://stackoverflow.com/questions/133973/how-does-this-keyword-work-within-a -javascript-object-literal – m90

+1

'this'在這種情況下是窗口,而不是對象,並且由於對象沒有在任何地方定義,所以沒有任何可以引用的東西。所以,不,你不能那樣做。 –

回答

8

您可以使用屬性:

var foo = { 
    greeting: 'hello', 
    get message() { 
     return this.greeting+' world' 
    } 
}; 

console.log(foo.message); 
foo.greeting = 'hi'; 
console.log(foo.message); 

雖然我不知道如何將這些將與$.extend

在舊的瀏覽器進行交互,你總是可以只讓message的功能,而不是一個屬性的getter

+3

這是一個很好的方法,但它不適用於舊版瀏覽器。 – Pointy

+0

哇,這些有多久了? – Snuffleupagus

2

試試這個方法:

var x = $.extend({}, { 
    greeting: 'hello', 
    message: function(){ 
    return this.greeting+' world'; 
    } 
}); 

alert(x.message); 
+0

對不起,@Eric先回答! –

+2

你沒有調用'x.message',你應該在'alert'上使用'console.log'來進行調試。 –

+0

哦,是的,你是對的,我只是修改相同的代碼。 –

0

您可以創建一些Constructor函數。在這個函數裏面this.greeting將被定義。

var Constructor = function() { 
    this.greeting = 'hello', 
    this.message = this.greeting + ' world' 
    return this; 
}; 

,然後擴展與Constructor例如你的對象:

var x = $.extend({}, new Constructor()); 
+0

你是對的,但在這種情況下,他正在使用一個文字對象。 –

+0

我想,這只是一個代碼片段。我認爲,如果有一個文字對象不是強制性的,那麼這個方法是一個不錯的選擇。 –

+1

這裏沒有必要'返回這裏' – Eric

相關問題