2017-05-04 16 views
3

今、配列プロキシを実装したいと思います。ここに私のコードですtypescriptの配列メソッドを拡張してオーバーライドする方法

class ArrayProxy<T> extends Array<T> { 

    constructor(data: T[]) { 
     super(...data); 
    } 

    push(...items: T[]): number { 
     var res = super.push(...items); 
     console.log("push invoked!"); 
     // some code to do extra operation. 
     return res; 
    } 
} 

var foo = new ArrayProxy(["aa","bb"]); 
foo.push("cc"); 

私のオーバーライドプッシュメソッドが呼び出されていないようです。 foo変数はArrayProxy以外のArrayのインスタンスです。
私typescriptですバージョン:2.3.2
tsconfig.json
のMyTest

{ 
    "compilerOptions": { 
     "emitDecoratorMetadata": true, 
     "experimentalDecorators": true, 
     "moduleResolution": "classic", 
     "target": "es5", 
     "module": "system", 
     "outFile": "js/test.js" 
    } 
} 

私はいくつかの解決策を探しましたが、失敗しました。

class MyNewArray<T> extends Array<T> { 
    getFirst() { 
     return this[0]; 
    } 
} 

var myArray = new MyNewArray<string>(); 
myArray.push("First Element"); 
console.log(myArray.getFirst()); // "First Element" 
David Sherret
から

が、私はエラーを得ました。

Uncaught (in promise) Error: myArray.getFirst is not a function 
    Evaluating http://localhost:8080/application/test/application/ts/bind_test 
    Loading application/ts/bind_test 
    at Object.execute (test.js:1733) 
    at j (system.js:4) 
    at E (system.js:4) 
    at O (system.js:4) 
    at system.js:5 

更新 私はArrayProxyのコンストラクタ内のスーパー呼び出し後にObject.setPrototypeOf(this, ArrayProxy.prototype);を追加したときにそれが動作します。 @ Aluan Haddadのおかげです。

答えて

関連する問題