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]用 hack 什么的?

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 回答