我一直在看语法:
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()
});
似乎在编写工厂时给用户提供了一个有用的工具。
感谢。
答案 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
。
答案 2 :(得分:0)
这有点奇怪.Maby就像是:
var module = {
func : (function(){
return {func2 : function(v){alert(v);}};
}).func2('alert me');
}
你不能链接函数定义(function func (){}.func1()
),只能函数调用(如果配置正确),如下所示:func1().func2().func3().....