簡體   English   中英

行為類似於函數的 JavaScript 變量

[英]JavaScript variable that behaves like a function

是否可以創建一個鏈接到函數並在每次讀取該變量時執行該函數的變量? 當對某個翻譯的調用已經發生時,用例將更新語言翻譯(返回一個將來可能會更改的翻譯字符串)。 這樣的相似, get一類的方法之三,但沒有實際定義的類。

知道如何做到這一點(如果有的話)?

您可以使用Object.defineProperty()來做到這一點

 Object.defineProperty(this, 'prop', { // adding to whatever "this" context is get: () => Math.random() }) console.info('prop get #1', prop) console.info('prop get #2', prop)

一種選擇是利用global對象可以在其上定義隱式在范圍內的屬性這一事實。 在 Web 瀏覽器中, Window對象是global對象,因此:

<script>
var foo = 123;

function bar() { console.log( foo ) };
bar();
</script>

是不是和這個一樣:

<script>
document.window.foo = 123;

function bar() { console.log( foo ) };
bar();
</script>

是否(或多或少)與此相同:

<script>
Object.defineProperty( window, "foo", { value: 123 } );

function bar() { console.log( foo ) };
bar();
</script>

因此,我們可以濫用Object.defineProperty來獲得您想要的效果,但需要注意的是,它不能在global屬性不可訪問的 JavaScript 范圍內工作。

<script>
function createMagicVariable( name, func ) {

    var propDef = {
        get: func
    };
    Object.defineProperty( window, name, propDef );
}
</script>

像這樣使用:

<script>

function getRandom() { return Math.random(); }

createMagicVariable( 'foo', getRandom );

console.log( foo );
console.log( foo );
console.log( foo );

</script>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM