使用prototype
方法,我们可以创建新方法......比如...
Object.prototype.newMethod=function(){
// do something
}
在这里,我使用匿名函数定义newMethod
...现在,如果我想使用此方法,我必须使用它: <object>.newMethod();
但是现在我想创建一个我可以使用的新方法:<object>.newMethod;
...没有括号......我怎么能这样做???
请不要使用任何jQuery ...
答案 0 :(得分:5)
此规则的唯一例外是当您编写new Date
之类的内容时,括号因{(1}}}关键字而隐含,并且仅因为没有给出参数。
答案 1 :(得分:1)
我无法理解为什么你想要这样做,但它是可能,尽管有一个讨厌的hacky解决方法。你真正想要的是AFAIK,它是一个神奇的属性(就像someArray.length
属性一样)。
var foo = {val:'foo'};
foo.length = (function(that)
{
return function()
{
return that.val.length;
}
})(foo);
//at this point foo.length(); returns 3, but still requires parentheses
//so, build another closure, and assign a valueOf method to the lenth method:
foo.length.valueOf = (function(method)
{
return function()
{
return method();//call the length method
}
})(foo.length);
console.log(foo.length +1);//logs 4
foo.val += 'bar';
console.log(foo.length);//logs 6
//BUT:: be carefull!!
alert(foo.length);//coerces to string, we haven't redefined the toString method, so the function code will be alerted
alert(foo.length + '');//alerts 6
这只是为了告诉你,是它在理论上是可行的,但请,请不要使用这种过度污染的黑客......我还没有彻底测试过这个,但ATM,我已经注意到console.log(foo.length);
可以返回不同的值,不确定原因,但是:
foo = {val:'foo'};
foo.length = (function(that){return function(){ return that.val.length;};})(foo);
foo.length.valueOf = (function(method){return function(){return method();};})(foo.length);
foo.length;//returns 3, great
foo.val += 'bar';
console.log(foo.length);//logged 3 at first, now it's back to logging 6!<-- don't trust this is the conclusion
答案 2 :(得分:0)