2012-01-28 19 views
1

JavaScriptでオブジェクトや関数のサブタイプを作成するためにextendメソッドを使っています。私はこれら2つの線がどのように異なっているかをちょっと理解するのに苦労しています:JavaScriptの継承拡張メソッドのヒント

  • f.prototype = p;
  • f.prototype = new p();

舞台裏で実際に何が起こっているのか説明できますか?

「new p();」を使用すると、オブジェクトを渡すときの理解となります。存在しないコンストラクタが呼び出されます。これは正しいです?このコードを統合する方法はありますか?

function extend(p) { 
     if (p == null) throw TypeError(); 

     var f = function() {}, 
      t = typeof p; 

     if(t === 'object') { 
      f.prototype = p; 

      f.prototype.constructor = f; 
      return new f(); 

     } else if(t === 'function') { 
      f.prototype = new p(); 

      f.prototype.constructor = f; 
      return f; 
     } else { 
      throw TypeError(); 
     } 
    }  

    // ========================== 
    var Person = { 
     firstName: 'John', 
     lastName: 'Doe' 
    }; 
    console.log('Person: ', Person); 

    var Employee = extend(Person); 
    Employee.prototype = { 
     employeeID: 0 
    } 

    console.log('Employee: ', Employee); 

    var Manager = extend(Employee); 
    Manager.prototype.fireEveryone = function() { 
     alert('Everyone is fired!!!!'); 
    } 
    console.log('Manager: ', Manager); 

おかげ

+0

[このかもしれませんヘルプ。](http://stackoverflow.com/a/13072338/1257652) –

答えて

0

私はあまりにも熱心にこの質問への回答に掲載の回答を見て待っているであろうが、私は、私は、ECMAScriptの5で導入された新継承/ OOPメカニズムを見て、あなたをお勧めしますJavaScriptが関わっている限り、より密接に動作すると思う。ここ

より:

https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/defineProperties https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/defineProperty私はこの問題を過ぎて得ている https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/create

+0

ゴルマール、私は実際に投稿する前にこれらを見ていた...そして、これを見た:[リンク:http://kangax.github。 com/es5-compat-table /) ECMAScript 5がサポートされていないIE8を使用しています。 – Daniel

関連する問題