Функция расширения - PullRequest
       1

Функция расширения

1 голос
/ 12 апреля 2011

Я видел синтаксис:

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 ]

1 голос
/ 25 сентября 2011

Вы можете добавить свойства в прототип функции, а затем определить цепочку функций. Например:

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 вызывается, но это открывает некоторые очень интересные возможности.

Довольно гладко.

0 голосов
/ 12 апреля 2011

это немного странно. Это было что-то вроде:

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

Вы не можете объединять определения функций (function func (){}.func1()), только вызовы функций (если настроены правильно), которые выглядят так: func1().func2().func3().....

0 голосов
/ 12 апреля 2011

Я думаю, что вы ищете его синтаксис:

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

, при котором анонимная функция вызывается немедленно, а ее возвращаемое значение присваивается func.

См. Также: Как работают закрытия JavaScript?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...