1

typescript内のオブジェクトのコンストラクター関数への参照を取得するにはどうすればよいですか?

JavaScriptの例:

var anyObject = new this.constructor(options);

また

var anyObject = new someObj.constructor(options);

また

class Greeter { 
  greeting: string; 
  constructor(message: string, options: any) { 
       this.options = options; 
       this.greeting = message; 
  } greet() { 
     return "Hello, " + this.greeting; 
  } createAnyObj(){  
     return new this.constructor(this.options); 
  } 
} 

 var t= new Greeter('mes',{param1: 'val1'});
 var b=t.createAnyObj();

ありがとう。

その他の例:

>>>typescriptプレイグラウンドへのリンク

4

3 に答える 3

2

次のコードを使用して、必要なことを実現できます。

class A {
    constructor(public options: any) {

    }

    duplicate() {
        return new A(this.options);
    }

    someMethod() {
        return 'Hello! I am class A!';
    }
}

class B extends A {
    constructor(options: any) {
        super(options);
    }

    someMethod() {
        return 'This is class B!';
    }

    duplicate() : A {
        return new B(this.options);
    }
}

var objA = new A({key1: 'value1'});
var objWhithOptionsObjA = objA.duplicate(); //=> Instaceof class A
alert(objWhithOptionsObjA.someMethod());

var objB = new B({key2: 'value2'});
var objWhithOptionsObjB = objB.duplicate(); //=> Instaceof class B
alert(objWhithOptionsObjB.someMethod());

Bオプションをスーパークラスに渡すだけのコンストラクターが必要です。重複メソッドをオーバーライドしてB、のサブタイプであるを返しますA

于 2013-02-12T10:27:55.737 に答える
1

この問題は次の解決策で解決されました:

module Example{
    // Thank you, JavaScript!
    export function getConstructor(obj){
        return obj.constructor;
    }
    export class A{
        constructor(private options: any){}
        dublicate(){
            return new (getConstructor(this))(this.options);
        }
        someMethod(){
            return 'This is class A';
        }
    }
    export class B extends A{
        someMethod(){
            return 'This is class B';
        }
    }
}

// Class A
var objA = new Example.A({key1: 'val1'});
console.log(objA.someMethod(), objA); //=> This is class A
var objA2 = objA.dublicate();
console.log(objA2.someMethod(), objA2); //=> This is class A

// Class B
var objB = new Example.B({key2: 'val2'});
console.log(objB.someMethod(), objB); //=> This is class B
var objB2 = objB.dublicate();
console.log(objB2.someMethod(), objB2); //=> This is class B

実例=>オープンプレイグラウンド

于 2013-02-14T05:17:20.197 に答える
0

演算子を使用newして、コンストラクターで必要なパラメーターを使用してオブジェクトをインスタンス化します。これは、他のオブジェクト指向プログラミング言語で行う方法と似ています。以下は、typescript公式Webサイトの例です。

class Greeter {
    constructor(public message: string, public options?: any) {          
     }

     greet() {
      return "Hello, " + this.message;
     }

     createAnyObj(){  
        return new Greeter(this.message, this.options);         
     } 
}

var greeter = new Greeter("world");
于 2013-02-12T06:50:20.063 に答える