Javascript TS/ES6:实例化类而不调用构造函数
有没有办法在不调用构造函数的情况下实例化新的类实例 大概是这样的:Javascript TS/ES6:实例化类而不调用构造函数,javascript,node.js,typescript,ecmascript-6,es6-class,Javascript,Node.js,Typescript,Ecmascript 6,Es6 Class,有没有办法在不调用构造函数的情况下实例化新的类实例 大概是这样的: class Test { constructor(foo) { this.foo = 'test'; } } const a = new Test('bar'); // call constructor const b = Test.create(); // do not call constructor console.log(a.foo, a instanceof Test); // b
class Test {
constructor(foo) {
this.foo = 'test';
}
}
const a = new Test('bar'); // call constructor
const b = Test.create(); // do not call constructor
console.log(a.foo, a instanceof Test); // bar, true
console.log(b.foo, b instanceof Test); // undefined, true
我正在尝试开发TS mongo ORM,并希望使用实体构造函数来创建新对象,但不希望在实例化已持久化对象(已存储在DB中的对象)的实体时调用它们
我知道doctrine(PHP ORM)使用这种方法,但据我所知,他们正在使用代理类来实现它。在typescript中(或者通常在ES6/ES7中)有没有实现这一点的简单方法
我已经找到了这个问题,它要求相反的答案,并且看到了一个提到物体的答案。这听起来是一个可行的方法,但从文件来看,我并不确定这是否可行 您可以添加一个
static
create方法,该方法从类原型创建一个对象。类似的方法应该会奏效:
class Test {
constructor(foo) {
this.foo = foo;
}
static create() {
return Object.create(this.prototype);
}
}
const a = new Test('bar'); // call constructor
const b = Test.create(); // do not call constructor
console.log(a.foo, a instanceof Test); // bar, true
console.log(b.foo, b instanceof Test); // undefined, true
您可以添加一个
static
create方法,该方法从类原型创建一个对象。类似的方法应该会奏效:
class Test {
constructor(foo) {
this.foo = foo;
}
static create() {
return Object.create(this.prototype);
}
}
const a = new Test('bar'); // call constructor
const b = Test.create(); // do not call constructor
console.log(a.foo, a instanceof Test); // bar, true
console.log(b.foo, b instanceof Test); // undefined, true
哦,天哪,真的那么简单吗?:]好吧,你要求一个简单的方法…!:)哦,天哪,真的那么简单吗?:]好吧,你要求一个简单的方法…!:)您是否愿意限制类允许使用的功能?如果有人在构造函数中添加对类对象本身的行为至关重要的逻辑,比如绑定函数或其他东西,会怎么样?我需要解决一个实现问题。我不确定这是否是讨论它的正确位置,但问题是,有时我需要在没有任何数据、只有实体id的情况下实例化该类。如果有构造函数参数(我当然希望允许),我就不能调用构造函数,因为我知道我可以用null调用它,但是传递null也有一个问题,需要传递一些东西——可能是对象,当用户使用该对象的属性时,他会在那里得到一个null指针。问题是,我希望用户使用构造函数只是为了创建新实体(而不是在其他地方),这是将被记录的东西,所以我认为它很好,足够公平。在我看来,这似乎是一个不使用构造函数来设置您想要的属性,而是保持构造函数简单并在构造函数之外构建其他逻辑的论点。您愿意限制类允许使用的功能吗?如果有人在构造函数中添加对类对象本身的行为至关重要的逻辑,比如绑定函数或其他东西,会怎么样?我需要解决一个实现问题。我不确定这是否是讨论它的正确位置,但问题是,有时我需要在没有任何数据、只有实体id的情况下实例化该类。如果有构造函数参数(我当然希望允许),我就不能调用构造函数,因为我知道我可以用null调用它,但是传递null也有一个问题,需要传递一些东西——可能是对象,当用户使用该对象的属性时,他会在那里得到一个null指针。问题是,我希望用户使用构造函数只是为了创建新实体(而不是在其他地方),这是将被记录的东西,所以我认为它很好,足够公平。在我看来,这似乎是一个不使用构造函数来设置想要的属性,而是保持构造函数简单并在构造函数之外构建其他逻辑的论点。