简体   繁体   English

javascript 从 class 实例访问 class 工厂

[英]javascript access class factory from class instance

Is it possible to access the factory that created current instance from the same instance?是否可以从同一个实例访问创建当前实例的工厂?

for example:例如:

class Vect {}
class DVect extends Vect{}

const calcFunc = (inst:Vect|DVect) =>{
  let constructorParams = ...
  return new inst.Factory(...constructorParams)
  //note - Factory is not a real method
}

console.log(calcFunc(new Vect))
// will log a Vect instance

console.log(calcFunc(new DVect))
// will log a DVect instance


here I would expect a Vect to be returned if I passed to calcFunc a Vect and DVect if I passed DVect在这里,如果我传递给calcFunc一个VectDVect ,如果我通过DVect ,我希望返回一个Vect

so, is it possible in javascript?那么,在 javascript 中是否可能?

Try the .constructor property that's on almost every object in JS:尝试 JS 中几乎每个 object 上的.constructor属性:

const calcFunc = (inst /*: Vect|DVect */) => {
  let constructorParams = //...
  return new inst.constructor(...constructorParams)
}

(Edge case: objects created by Object.create(null) won't have a .constructor property. But objects created by doing new Vect , new DVect , new of any class {...} should all have a .constructor .) (极端情况:由Object.create(null)创建的对象将没有.constructor属性。但是通过执行new Vectnew DVectnew任何class {...}创建的对象都应该有一个.constructor 。)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM