javascript - 拦截 Javascript 中的构造函数调用

标签 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:

根据您存储该函数的位置,您不必在拦截实现中命名它。

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

对于 2:

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

关于javascript - 拦截 Javascript 中的构造函数调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24566011/

相关文章:

javascript - 为uib进度条使用不同的背景颜色

java - 什么语言? Silverlight/Java/Javascript

javascript - Discord.js/JS - 如果每个字符串都有指定的数字(级别排行榜),则按降序对字符串数组进行排序

javascript - 使用循环向我的 Leaflet map 添加图层

javascript - Typescript 可以推断由其基方法实例化的扩展类实例的类型吗?

c++ - 为什么不递增? (构造函数)

c++ - 如何将 C++ 编译器错误 "cannot convert ' Type' 修复为 'const Type*' "?

c# - 合并参数和 IList<T> 构造函数

C++ 构造函数初始化列表调用默认构造函数。为什么?

javascript - 为什么指令没有调用我的 Controller 方法?