为Prototype调用没有括号的方法

时间:2012-10-04 15:39:36

标签: javascript prototypejs

我希望扩展String类并添加一个简单的方法:

String.prototype.world = function(){
  return " world";
} 

我想做类似的事情:

"hello".world

然后返回"hello world"。而不是做:

"hello".world()

调用不带括号的函数将返回函数对象。

我正在寻找的是执行函数而不是返回它(不指定括号)。

我可以用JavaScript以某种方式吗?

编辑:根据this,使用__defineGetter__是非标准版并已弃用。寻找替代品。

2 个答案:

答案 0 :(得分:4)

你可以使用setter getter来做到这一点。 jsfiddle。 IE<不支持setter getter 9;

 function getter(){
    return this + " world";
  }
  if(Object.__defineGetter__){ // chrome 
  String.prototype.__defineGetter__('world', getter);
}else{
 Object.defineProperty(String.prototype, 'world', { // IE
                    get : getter
                });
}

答案 1 :(得分:2)

您可以像这样定义一个getter:

String.prototype.__defineGetter__("world", function() {
    return this + ' world';
});

'hello'.world // 'hello world'

fiddle