2009-11-16 38 views
4

在嘗試移植並且通常會使用一些非瀏覽器代碼時,我遇到了看起來像普通對象屬性的getter和setter。事情是這樣的:在JScript中,是否可以實現從外部看起來像對象屬性的getter和setter?

js> var o = { 
    a: 4, 
    get b(){ 
     return this.a + 3; 
    }, 
    set b(val){ 
     this.a = val - 3; 
    } 
}; 
js> o.a 
4 
js> o.b 
7 
js> o.b=10 
10 
js> o.a 
7 

這似乎在最近版本的犀牛和SpiderMonkey的的工作,但有可能實現或模擬行爲(定義語法對我來說不那麼重要)在JScript(Windows腳本宿主) ?

+1

對不起。我不會改變我對前面問題的回答。 – hillu 2009-11-16 19:16:15

回答

1

答案是No。 Setters和getters只是一些像函數一樣的屬性,但是沒有辦法正確地模擬語法。我有一個半途的概念,模仿使用行爲的< = IE7中的HTML元素的getter和setter,但即使這樣也比我想象的要困難得多。即使IE8只支持DOM對象上的getters/setter,而不支持JScript對象,所以我認爲這是JScript團隊需要包含的東西,如果他們曾經這樣做的話。

如果只有人想到在原始的JScript/ECMAScript實現中包含setter和getter。

+0

我並不認爲像屬性這樣的getter和setter是一個好主意,因爲在閱讀使代碼更難理解的代碼時,語法往往會調用假設。它看起來好像聲稱「Javascript是一個穩定的語言在過去10年」有比我想象的更少的物質... – hillu 2009-11-23 10:36:38

+0

只是一個FYI:在IE8中,訪問器屬性(getters/setters)僅在DOM對象上實現。在回答一個問題爲什麼存在這種限制的問題時,一位微軟僱員表示該功能是最後一分鐘的補充,由於時間限制,它無法擴展到JScript對象。所以手指交叉,我們可能會看到它們在IE9中完全實現。 JavaScript一直是一種穩定的語言。它只是缺乏你通常從語言期望的很多功能。 – 2009-11-23 16:02:44

0

根據this article(由John Resig的,jQuery的作者),使用Javascript getter和setter都支持JScript.NET 8

相關問題