【发布时间】:2020-05-15 16:27:21
【问题描述】:
我遇到了这个问题,我希望一个函数可以从外部访问,但它还需要继承一些基于范围的属性,因为它在 JSON.stringify() 中用作可选的字符串化符,因此不能将额外的上下文传递给它。
假设我有这个代码
let object = {
function1(){
let a = 1
console.log(object.function2()) // a is not defined undefined
},
function2(){ return a }
}
所以我想知道是否有办法改变 function2 的闭包/作用域状态,比如绑定一个新的 this 上下文但绑定整个作用域。
我发现的唯一方法是
let object = {
function1(){
let a = 1
let function2 = eval('(function '+object.function2.toString()+')')
console.log(function2()) // 1
},
function2(){ return a }
}
原因是内存管理,因为我不想在每次调用另一个函数时都创建一个新函数。
【问题讨论】:
-
这样做也会破坏 VSCode 中的调试功能,因为它是一段经过评估的代码
-
为什么不将
a设为object的属性?那么function2可以返回this.a? -
或阅读本文的“模拟私人成员”部分:let
-
您能否提供一个示例,说明该功能应如何“从外部访问”。也许是一个具有预期结果的更具体的例子?还有其他方法可以传递数据和绑定函数,但我不确定要求是什么。
-
this.a可能是.bind(object)用于 JSON.stringify 替换器
标签: javascript node.js function scope closures