Javascript 从构造函数中创建构造函数
可能是个愚蠢的问题,但是。。。 …是否可以通过Object.create()从构造函数中创建构造函数。 与伪代码类似: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.
函数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.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
会解决你的问题吗?好吧,如果你只是好奇,我发现了一个问题,里面有你可能想要的所有细节:-)如果你需要解决一个实际问题,请评论,我将重新打开。