可能是一个愚蠢的问题,但... ...可以通过Object.create()从构造函数中创建构造函数。 就像伪代码一样:
function f1(){this.val = 'test';}
var f2 = Object.create(f1);
var f3 = new f2();
答案 0 :(得分:1)
否,您不能使用Object.create
-它创建一个对象,而不是(构造函数)函数。
如果要“扩展” f1
,可以为此使用ES6 class
语法:
class f2 extends f1 {}
console.log(new f2) // works
console.log(f1.isPrototypeOf(f2)) // true
答案 1 :(得分:0)
您不能使用Object.create
克隆函数,但可以通过将函数绑定到空对象来实现,例如:
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);
答案 2 :(得分:0)
新的构造函数只需要调用旧的构造函数,就必须继承所有原型:
function f2() {
f1.call(this);
}
f2.prototype = Object.create(f1.prototype);
如果创建扩展f1的类f2,也会发生同样的情况。
答案 3 :(得分:0)
您可以有一个返回类的函数(类工厂),而不是调用Object.create。不过,您不会打电话给new
来上初学。您可以将参数发送到工厂(而不是constructor
)
function getClass(message) {
class Foo {
constructor() {
console.log('constructed: ' + message);
}
ok() {
console.log('ok')
};
}
return Foo
}
const bar = new(getClass("yes sir!"))
bar.ok()