扩展功能

时间:2011-04-12 05:54:14

标签: javascript function

我一直在看语法:

var module = {

    func: function(value) {

        some code;

    }.func2("value");

}

在各个地方出现,我想知道如何做到这一点。我记得有一段时间看过一篇关于它的文章,但现在找不到了。无论我尝试.func2("value")只是告诉语法错误。

例如,看一下SproutCore的TemplateView简介。

Todos.StatsView = SC.TemplateView.extend({
  remainingBinding: 'Todos.todoListController.remaining',

  displayRemaining: function() {
    var remaining = this.get('remaining');
    return remaining + (remaining === 1 ? " item" : " items");
  }.property('remaining').cacheable()
});

似乎在编写工厂时给用户提供了一个有用的工具。

感谢。

3 个答案:

答案 0 :(得分:1)

您可以向Function的原型添加属性,然后添加链函数定义。例如:

Function.prototype.trigger = function(trigger) {

    var setValue = this;

    return function(thevalue) {
        alert(trigger + ' set to ' + thevalue);
        setValue(thevalue);
    };

};

var _value = 0;

var setValue = function(thevalue) {

    _value = thevalue;

}.trigger('value');

setValue(25);

当定义setValue时,触发器函数在其链接的匿名函数的范围内被调用,并且setValue被赋予触发器返回的值。在这种情况下,我们只是警告正在调用setValue,但这会打开一些非常酷的可能性。

很漂亮。

答案 1 :(得分:0)

我认为您正在寻找的语法是:

func: (function(value) {
    //some code;
}("value"));

其中立即调用匿名函数并将其返回值分配给func

另请参阅:How do JavaScript closures work?

答案 2 :(得分:0)

这有点奇怪.Maby就像是:

var module = {
    func : (function(){
        return {func2 : function(v){alert(v);}};
    }).func2('alert me');
}

你不能链接函数定义(function func (){}.func1()),只能函数调用(如果配置正确),如下所示:func1().func2().func3().....