0

まず、次のように関数を呼び出していました。

var a=1;
a=foo(a,2);

prototype次に、次のように関数を見つけて呼び出しました。

var a=1;
a=a.foo(2);

配列またはオブジェクトの場合は小さくなります。

var a=[1,2,3];
a.foo(2);

このような関数を呼び出す方法はありますか:a(2)またはa[2]ハックなどで?

4

2 に答える 2

4
Array.prototype.foo = function(index) {
    return this[index];
};

var a=[1,2,3];

a = a.foo.call.bind(a.foo, a);


a(2); //3; 
a(1); //2
a(0); //1
于 2012-06-19T13:28:30.973 に答える
1

これを行うことができます。

var a=[1,2,3];
var m = "reallyLongMethodName";
a[m](2);

角括弧表記法a.reallyLongMethodName(2)を使用して呼び出します。

JavaScript では次のようなことが可能です。

var a=[1,2,3];
var c = a.foo;
c(2);

ただしthis、内部の参照cが配列ではなくなるため、これはあなたの場合には機能しません。

call()またはapply();を使用してこれを修正できます。

c.call(a, 2);

しかし、それはおそらくあなたの好みには長すぎます。

ラッパー関数を作成することもできます。

function c(ar, val) {
    ar.foo(val);
}

c(a, 2);

...しかし、繰り返しますが、それはおそらくあなたの好みには長すぎます;)。

全体として、あなたが手に入れたものはできるだけ短いものです...おめでとうございます。コードを可能な限り判読不能にしました。

于 2012-06-19T13:25:34.020 に答える