javascript - 动态修改 JavaScript 中的构造函数?

标签 javascript function constructor arguments abstraction

我想用 Javascript 中的构造函数做一些有点花哨的事情,但我不太确定该怎么做。

我希望能够定义构造函数,然后将它们传递给另一个函数(“修饰符”),如下所示:

function OriginalConstructor() {
    // Do constructor things here
    // Like defining methods and properties
}

NewConstructor = modifyConstructor(OriginalConstructor);

生成的“NewConstructor”在功能上应该等同于此:

function NewConstructor(id, data) {
    this.id = id;
    this.data = data;
    // Do stuff from the original constructor here
    // i.e. the same methods and properties defined in the original constructor
}

有人知道如何着手创建“modifyConstructor”函数吗?

最佳答案

您创建一个函数来设置您定义的属性并调用原始构造函数。例如:

function modifyConstructor(Constr) {
    function NewConstructor(id, data) {
        this.id = id;
        this.data = data;

        // Call original constructor
        Constr.apply(this, Array.prototype.slice.call(arguments, 2));
    }
    // Setting the constructor property might not be a good idea depending on
    // the use case
    NewConstructor.prototype = Object.create(Constr.prototype, {
        constructor: {value: NewConstructor, writable: true, configurable: true}
    });
    return NewConstructor;
}

这基本上是将 NewConstructor 实现为任何 Constr 的子类。

关于javascript - 动态修改 JavaScript 中的构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25451269/

相关文章:

javascript - 我们如何证明javascript函数是对象?

c - 使数组指向另一个数组的内存 C

java - 如何以简洁的方式调用 super 构造函数

c++ - 没有用户提供的构造函数的 const 限定类型的默认初始化

javascript - FIREFOX:插件还是扩展?

javascript - 在结束的 body 标签的末尾添加 defer 到脚本标签是多余的吗?

javascript - Electron 使用加速器调用上下文菜单中的菜单项

bash - 如果有同名的别名,如何在 bash 中调用函数?

php - 类构造函数干扰另一个类

javascript - POST 表单操作无法正常工作 [Django]