在Javascript中拦截构造函数调用

时间:2014-07-04 02:48:48

标签: javascript constructor

某处构造函数定义为

var Something = function() {
    // do stuff
}

如果我可以插入行

mydebug.Something = this;

一开始,我可以存储最近创建的Something实例,这可以帮助我调试。我不能,但是我通过Something(函数及其名称)并且可以用其他东西替换它。我只是不知道如何使“别的东西”表现得像原作一样。

function intercept(someConstructor, someName) {
    return function <<someName>> () { // 1
        var result = <<create a new instance>>; // 2
        mydebug[someName] = result;
        return result;
    }
}

将被称为

 intercept(Something, "Something")

至少有两个问题:

  1. 我不知道如何创建一个具有变量名称的函数。
  2. 我不知道如何创建实例。

1 个答案:

答案 0 :(得分:0)

1:

根据您存储该功能的位置,您不必在拦截实施中为其命名。

您可以执行return function () { ...或者您可以执行与someObject[someName] = function()...类似的操作,然后返回someObject[someName]

2:

如果我理解正确,你应该能够var result = new someConstructor();,但我并不是100%明确你的目标。