行为类似于函数的JavaScript变量

是否可以创建链接到函数的变量,并在每次读取变量时执行该函数?当某个特定翻译的调用已经发生时(返回将来可能会改变的翻译字符串),用例将是更新语言翻译。这有点类似于类的get ter方法,但没有实际定义类。

有什么想法(如果有的话)怎么做?

yangshenghan521 回答:行为类似于函数的JavaScript变量

您可以使用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对象可以具有在其上定义的隐式范围内的属性这一事实。在网络浏览器中,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>
本文链接:https://www.f2er.com/3025066.html

大家都在问