Javascript 从构造函数中创建构造函数

Javascript 从构造函数中创建构造函数,javascript,constructor,prototype,Javascript,Constructor,Prototype,可能是个愚蠢的问题,但是。。。 …是否可以通过Object.create()从构造函数中创建构造函数。 与伪代码类似: 函数f1(){this.val='test';} var f2=Object.create(f1); var f3=新的f2()不,不能使用对象。创建-它创建的是对象,而不是(构造函数)函数 如果要“扩展”f1,可以使用ES6class语法: class f2 extends f1 {} console.log(new f2) // works console.log(f1.

可能是个愚蠢的问题,但是。。。 …是否可以通过Object.create()从构造函数中创建构造函数。 与伪代码类似:

函数f1(){this.val='test';}
var f2=Object.create(f1);

var f3=新的f2()不,不能使用对象。创建
-它创建的是对象,而不是(构造函数)函数

如果要“扩展”
f1
,可以使用ES6
class
语法:

class f2 extends f1 {}
console.log(new f2) // works
console.log(f1.isPrototypeOf(f2)) // true

不能使用
对象克隆函数。创建
,但可以通过将函数绑定到空对象来实现,示例如下:

函数f1(){
this.val='test';
}
var f2=f1.bind({});
var f3=新的f2();
var f4=新的f2();
console.log(f3.val);
console.log(f4.val);
f3.val=‘非测试’;
f4.val=‘其他值’;
console.log(f3.val);

console.log(f4.val)新构造函数只需调用旧构造函数,它必须继承所有原型:

 function f2() {
  f1.call(this); 
 }

 f2.prototype = Object.create(f1.prototype);

如果创建扩展f1的类f2,也会发生同样的情况。

而不是调用Object.create,则可以使用返回类(类工厂)的函数。不过,您不会调用
new
来获取初始类。您将向工厂发送参数(而不是
构造函数

函数getClass(消息){ 福班{ 构造函数(){ console.log('构造:'+消息); } ok(){ console.log('ok') }; } 返回Foo } const bar=new(getClass(“yes sir!”)
bar.ok()
不,不是。你到底想做什么?为什么你需要
f2
不同于
f1
?你希望
f3
是什么样子?@Bergi:只是出于好奇……那么
var f2=f1
会解决你的问题吗?好吧,如果你只是好奇,我发现了一个问题,里面有你可能想要的所有细节:-)如果你需要解决一个实际问题,请评论,我将重新打开。