Create a constructor out of a constructor
本问题已经有最佳答案,请猛点这里访问。
可能是一个愚蠢的问题,但......
...是否可以通过 Object.create() 从构造函数中创建构造函数。
就像在伪代码中一样:
1 2 3 | function f1(){this.val = 'test';} var f2 = Object.create(f1); var f3 = new f2(); |
不,您不能使用
如果你想"extend"
1 2 3 | class f2 extends f1 {} console.log(new f2) // works console.log(f1.isPrototypeOf(f2)) // true |
您可以使用一个返回类的函数(A 类工厂),而不是调用 Object.create。不过,您不会调用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | function getClass(message) { class Foo { constructor() { console.log('constructed: ' + message); } ok() { console.log('ok') }; } return Foo } const bar = new(getClass("yes sir!")) bar.ok() |
新的构造函数只需要调用旧的构造函数,它必须继承所有原型:
1 2 3 4 5 | function f2() { f1.call(this); } f2.prototype = Object.create(f1.prototype); |
如果您创建一个扩展 f1 的类 f2,也会发生同样的情况。
您不能使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | function f1() { this.val = 'test'; } var f2 = f1.bind({}); var f3 = new f2(); var f4 = new f2(); console.log(f3.val); console.log(f4.val); f3.val = 'not test'; f4.val = 'other value'; console.log(f3.val); console.log(f4.val); |