javascript创建新方法

时间:2012-10-17 15:08:46

标签: javascript

使用prototype方法,我们可以创建新方法......比如...

Object.prototype.newMethod=function(){
   // do something
}

在这里,我使用匿名函数定义newMethod ...现在,如果我想使用此方法,我必须使用它: <object>.newMethod();

但是现在我想创建一个我可以使用的新方法:<object>.newMethod; ...没有括号......我怎么能这样做???

请不要使用任何jQuery ...

3 个答案:

答案 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)

调用不带括号的函数的唯一方法是使用getterssetters来定义它。

请注意,这些是JavaScript 1.8的新功能,并非所有浏览器都支持。