是否可以创建链接到函数的变量,并在每次读取变量时执行该函数?当某个特定翻译的调用已经发生时(返回将来可能会改变的翻译字符串),用例将是更新语言翻译。这有点类似于类的get
ter方法,但没有实际定义类。
有什么想法(如果有的话)怎么做?
答案 0 :(得分:6)
您可以使用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)
答案 1 :(得分:1)
一种选择是利用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>