Noncommutative Field

記事検索

<<ECMAScript で変数やメソッドを隠蔽する方法 | prototype.js を用いた OOP で、後方参照できるクラスを宣言する | ECMAScript の 型変換についてメモ>>

2005年09月07日

prototype.js を用いた OOP で、後方参照できるクラスを宣言する

実践 prototype.js [2] 中にある、ひげぽんさんの疑問の解決法を思いついた。

//この方法では引数が渡せない
function Hoge(){
    Hoge = Class.create();
    Hoge.prototype = (new HogeBase).extend({
        initialize : function(){...},
        ...
    });
    return new Hoge();
}

困ったのは最後の return new Hoge() である。これでは引数が渡せない。new がなければ Hoge.apply(Hoge , arguments) とか出来るのに。

しょうがないので eval を使って解決した。

//この部分は最初に読み込ませる
Function.prototype.createInstance = function(){
    var strArgs = 'new this(';
    for(var i = 0; i < arguments.length; i++){
        strArgs += 'arguments[' + i + ']';
        if(i != arguments.length - 1){
            strArgs += ',';
        }
    }
    strArgs += ')';
    return eval(strArgs);
}
Function.prototype.newWithArgumentsArray = function(args){
    return this.createInstance.apply(this , args);
}


//Hoge は後方参照できる
function Hoge(){
    Hoge = Class.create();
    Hoge.prototype = (new HogeBase).extend({
        initialize : function(){...},
        ...
    });
    return Hoge.newWithArgumentsArray(arguments);
}

eval を使わずに解決する方法はないものだろうか?

正解がトラックバックされています。


ただし、後方参照できているかのように振舞うのは new HogeHoge() の場合のみだ。メソッドを追加しようとして、Hoge.prototype.additionalMethod = function(){...} などとやっても事前に new HogeHoge() を1回でも行ってない限り、書き換えられる前の Hoge のプロパティに追加されてしまいうまくいかない。後方参照できるということは、定義が静的であるということだから、動的にやるとうまくいかないのは当然だろう。

posted by malt3rd at 13:35 | TrackBack(5) | ECMAScript

この記事へのTrackBack URL

http://blog.seesaa.jp/tb/6656556

JavaScript の new 演算子の意味
Excerpt
JavaScript における new 演算子の動作は大まかにいって以下のとおりである。(new F() とした場合。)新しいオブジェクトを作る。1 で作ったオブジェクトの [[Prototype]]...
Weblog
Days on the Moon
Tracked
2005-10-24 16:31
負けても勝ち組w
Excerpt
てぃん★てぃんシゴきまくってもらって5諭吉くれるってどんだけww パチ屋行く前の軍資金集めの定番になってしまったw
Weblog
ドンパッチ
Tracked
2008-02-16 15:29
あっちーーーー!!!!!!
Excerpt
人生初のSМやっちゃいましたw つってもプチSМですが(^−^;僕は痛いの嫌いなのでS役。 М女をたっぷり調教してやりましたよwしゃぶらせながらムチでビシビシするのは何とも言えない快感でした・・・♪っ...
Weblog
まあむ
Tracked
2008-09-23 06:18
びひゃあぁぁぁぁぁい!
Excerpt
こないだ女にロー夕ーと電マ持って来させてマムコを集中攻撃したよ(`・ω・´)スゲエ声でアンアン言いまくって、もの凄い勢いで9マソくれたよwwwwww寝て稼ぐのもいいけど、たまには攻めるのもアリだよなー...
Weblog
コンプ
Tracked
2008-10-04 19:22
試写室にてwww
Excerpt
お互い家でするのは嫌だし、ホテルってベタだし・・・試写室でヤってきたwwスリルあるし密室感あるし普通よりスンゲー興奮したwwwwww女もスゲエ濡れ濡れで何回もイってたしw おかげで10マソも貰えたわぁ...
Weblog
暴走
Tracked
2008-10-25 04:24

プロフィール

名前
malt3rd
URL
http://www.geocities.jp/commutativefield/
メールアドレス
malt3rd {dot} NoncommutativeField {at} submit-asap {dot} org
Powered by Seesaa

RDF Site Summary