首先,我正在调用我的函数:
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]
带有黑客或其他东西?
答案 0 :(得分: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
答案 1 :(得分:1)
你可以这样做;
var a=[1,2,3];
var m = "reallyLongMethodName";
a[m](2);
使用square bracket notation调用a.reallyLongMethodName(2)
。
这样的在中可能是:
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);
......但是,这可能对你的喜好来说太长了;)。
总而言之,你得到的东西就像它一样短...... 祝贺你。您已使代码尽可能不可读。