Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript TS/ES6:实例化类而不调用构造函数_Javascript_Node.js_Typescript_Ecmascript 6_Es6 Class - Fatal编程技术网

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指针。问题是,我希望用户使用构造函数只是为了创建新实体(而不是在其他地方),这是将被记录的东西,所以我认为它很好,足够公平。在我看来,这似乎是一个不使用构造函数来设置想要的属性,而是保持构造函数简单并在构造函数之外构建其他逻辑的论点。