2017-06-10 14 views
0

は(私はこのスニペット時stumpled typescriptですにおけるデコレータのドキュメントを読む:。@sealedが実行されるとconstructor.prototypeを参照しているものは何ですか?

function sealed(constructor: Function) { 
    Object.seal(constructor); 
    Object.seal(constructor.prototype); 
} 

、それはコンストラクタとそのプロトタイプの両方をシールする

constructor.prototypeを何このプロトタイプの継承は時々混乱するかもしれません。

答えて

1

あなたは簡単な例とその結果のjavascriptを見て確認できます:

class A { 
    fn1() { } 
} 

class B extends A { 
    fn2() { } 
} 

コンパイルJS:

var A = (function() { 
    function A() { 
    } 
    A.prototype.fn1 = function() { }; 
    return A; 
}()); 
var B = (function (_super) { 
    __extends(B, _super); 
    function B() { 
     return _super !== null && _super.apply(this, arguments) || this; 
    } 
    B.prototype.fn2 = function() { }; 
    return B; 
}(A)); 

デコレータ機能がある受信constructorあなたが開発者でAはあなたが表示されますコンソール入力すると、コンストラクタ関数ですAまたはB

function A() { 
    } 

Bの場合も同様です。

function B() { 
     return _super !== null && _super.apply(this, arguments) || this; 
    } 

constructor.prototype部分はクラスのプロトタイプを指し、そうA.prototypeが表示されます:

Object {fn1: function, constructor: function} 

そしてB.prototypeが表示されます:

A {constructor: function, fn2: function}