小编Y B*_*ond的帖子

JavaScript装饰模式.错误:超出了最大调用堆栈大小

这是Decorator模式的一个工作示例:

class Dummy {
    run() {
        console.log('run');
    }
}

function get() {
    let instance = new Dummy();
    instance.run = ((func) => {
        return function() {
            func();
            console.log('decorator run');    
        }
    })(instance.run);

    return instance;
}

let obj = get();
obj.run();
Run Code Online (Sandbox Code Playgroud)

但是,如果我们将get函数更改为:

function get() {
    let instance = new Dummy();
    instance.run = function() {
        instance.run();
        console.log('decorator run');  
    }       

    return instance;
}
Run Code Online (Sandbox Code Playgroud)

我们将面临一个错误: VM68418:6 Uncaught RangeError:Dummy.instance.run(:6:32)超出了最大调用堆栈大小

为什么会这样?所述instance.run仍然是围绕原始方法的包装,而不"无用"附加的自执行的功能.

我很高兴听到答案

javascript recursion decorator

7
推荐指数
1
解决办法
149
查看次数

标签 统计

decorator ×1

javascript ×1

recursion ×1