2

だから私はこの小さなコードを手に入れました、それが実装されている方法を気にしないでください.

function A() {}

A.prototype = {
    nw: function(t) {
        return new t(A);
    }
}

プロトタイプ継承による子 (たとえば B) が関数 nw を呼び出し、新しい t(B) を返すようにしたい場合、正しいパラメーターを渡すために、新しい t(A) の A を何に置き換える必要がありますか?

「return new t(this)」みたいな?

B.nw(C) は新しい C(B) を返します。

4

3 に答える 3

0

簡単な継承メカニズムを実装できます。

var Class = function( parent ){
   var f = function(){};

   if( typeof parent == 'function' ){
      f.prototype = new parent;  
   }else if( parent) {
       f.prototype = parent;  
   }

   f.prototype.__parent = parent;  // :)
   f.prototype.__root = ( parent &&  parent.prototype && parent.prototype.__root) || parent || f; // :)
   return f
};

そしていま:

   var A = Class(),
       B = Class(A),
       C = Class(B),

       objA = new A,
       objB = new B,
       objC = new C;

objC.__parent == B; // true;
objB.__parent == A; // true

(objC.__root == objB.__root) && ( objA.__root == A ); // true;

ただし、ルートオブジェクトのプロトタイプを特定できます(あなたの場合):

   var A = Class({ 
             nw: function( t ) {                  
                    // What you like here? :)    

                    return new t( this.__parent ); 
                    //return new t( this.constructor );  
                    //return new t( this.__root );
             } 
           });
于 2012-06-19T07:26:37.097 に答える
0

ええと、他の答えは複雑に見えます。あなたが望むように見えます:

function A() {}

A.prototype = {
    constructor: A,

    nw: function(t) {
        return new t( this.constructor );
    }
}
于 2012-06-19T12:44:57.903 に答える
0

私がこれを正しく理解していれば、これはあなたが望むものです:

function A() {}

A.__proto__ = {
    log: function(t) {
        return new t(this);
    }
}

次のコードを実行すると

A.log(function(obj){
    console.log(obj);
});

ログAになります

于 2012-06-18T11:46:06.843 に答える