相关疑难解决方法(0)

使用代理捕获所有链式方法和getter(用于延迟执行)

语境:

说我有一个对象,obj有一些方法和一些吸气剂:

var obj = {
    method1: function(a) { /*...*/ },
    method2: function(a, b) { /*...*/ },
}
Object.defineProperty(obj, "getter1", {get:function() { /*...*/ }});
Object.defineProperty(obj, "getter2", {get:function() { /*...*/ }});
Run Code Online (Sandbox Code Playgroud)

obj是可链接的,链条将定期包括方法和吸气剂:( obj.method2(a,b).getter1.method1(a).getter2例如).

我知道这个链接使用getter有点奇怪,在大多数情况下可能是不可取的,但这不是一个普通的js应用程序(它适用于DSL).

但是,如果(出于某种原因)我们想要执行这些链式方法/ getter真的很懒散呢?比如,只有在调用某个"最终"getter /方法时才执行它们?

obj.method2(a,b).getter1.method1(a).getter2.execute
Run Code Online (Sandbox Code Playgroud)

在我的例子中,这个"最终"方法toString可以由用户显式调用,或者在他们尝试将其连接到字符串时隐式调用(valueOf也触发评估).但是我们将使用executegetter示例来保持这个问题的广泛性,并希望对其他人有用.


题:

所以这里的想法是:代理obj并简单地将所有getter调用和方法调用(及其参数)存储在一个数组中.然后,当execute在代理上调用时,以正确的顺序将所有存储的getter /方法调用应用于原始对象并返回结果:

var p = new Proxy(obj, {
    capturedCalls: [],
    get: function(target, property, receiver) {
        if(property === "execute") {
            let result = target;
            for(let call …
Run Code Online (Sandbox Code Playgroud)

javascript ecmascript-6

5
推荐指数
1
解决办法
426
查看次数

标签 统计

ecmascript-6 ×1

javascript ×1