- 締切済み
prototypeに二つ以上の暗黙の参照を持たせることはできない?
var NAMESS = { org:{ } } NAMESS.org = { clsFoo : function( ){ this.foo = function( ){ alert("foo"); } } ,clsBar : function( ){ this.bar = function( ){ alert("bar"); } } ,clsHoge : function( ){ } } NAMESS.org.clsHoge.prototype = new NAMESS.org.clsFoo( ); NAMESS.org.clsHoge.prototype = new NAMESS.org.clsBar( ); 上記コードではclsHogeはclsBarのみ継承し、clsFooを継承できません。(代入しているので当たり前かもですが‥) これを NAMESS.org.clsHoge.prototype.foo = new NAMESS.org.clsFoo( ); NAMESS.org.clsHoge.prototype.bar = new NAMESS.org.clsBar( ); というようにする方法は知ってはいますが、 できればfooとbar両方を暗黙の参照にしたいと考えています。 JavaScriptでは二つ以上の継承はできないのでしょうか? よろしくお願いします。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- みずの(@mizuno3)
- ベストアンサー率73% (192/263)
普段prototype.jsは使ってないのですが、extendというメソッドがあったと思うので、それを利用することで継承できるんじゃないかな?と思います。 間違っていたらすいません。
お礼
回答ありがとうございます。 >>普段prototype.jsは使ってないのですが prototype.jsの話ではなく、プロトタイプチェーン等の、prototypeプロパティのことです。 また、せっかく回答を頂きながら誠に勝手ではありますが自己解決いたしました。 コンストラクタに継承先クラスを呼び出すようにするといいようです。 例) clsHoge : function( ){ var barExtend = NAMESS.org.clsBar; barExtend( ); var fooExtend = NAMESS.org.clsFoo; fooExtend( ); } あるいは一行で、 clsHoge : function( ){ NAMESS.org.clsBar.call(this); NAMESS.org.clsFoo.call(this); } すっきりする後者の方がいいような気がします。 また、以下のようなコードも試してみましたが、これはNGのようです。 clsHoge : function( ){ NAMESS.org.clsBar( ); NAMESS.org.clsFoo( ); } これがNGになる理由はよくわかりませんが、一応解決はできました。 (まだまだ勉強不足のようです。)