0

オブジェクトの「タイプ」のマップがあり、それぞれに呼び出すことができる独自のプロパティと関数があるJavascriptでポリモーフィックオブジェクト指向の何かをしようとしています。

プロパティは正常に機能しますが、機能は機能しません。理由がわかりません。Firefox では次のエラーが表示されます: TypeError: this.functionmap[type].action is not a function

これが私のコードです:

var object = {
    flapWings : function(count) { alert("I am flapping my wings "+count+" times"); },
    kick : function(count) { alert("I am kicking my legs "+count+" times"); },
    functionmap : {
        "bird" : { label : "Bird", action : this.flapWings },
        "horse" : { label : "Horse", action : this.kick }
    },
    doAction : function (type, count) {
         alert("I am a "+this.functionmap[type].label);
         this.functionmap[type].action(count);
    }
};

object.doAction("horse", 5);

JSFiddle の例を次に示します。

http://jsfiddle.net/JKvyP/

理由がわかりません: アクション: this.kick は、そのすぐ上に作成されたキック関数への参照を取得していません!

action : function(count) : this.kick(count); のような愚かなことは避けたいです。それも機能しませんが-パラメーターを再入力することなく直接参照したい

4

1 に答える 1

1

参照されている関数に魔法のようにパラメーターを渡すことはできないため、いくつかの匿名関数が必要になり、そのスコープ内でオブジェクトを直接参照する必要があります。

var object = {
    flapWings : function(count) { 
        alert("I am flapping my wings "+count+" times"); 
    },
    kick : function(count) {
        alert("I am kicking my legs "+count+" times"); 
    },
    functionmap : {
         "bird" : { 
                   label : "Bird", 
                   action : function(param) {
                                object.flapWings(param);
                           }
                  },
        "horse" : { 
                   label : "Horse", 
                   action : function(param) {
                               object.kick(param);
                            }
                   }
    },
    doAction : function (type, count) {
         alert("I am a "+this.functionmap[type].label);
         this.functionmap[type].action(count);
    }
};

object.doAction("horse", 5);

フィドル

于 2013-03-27T18:28:11.893 に答える