Публичный метод/функция плагина jQuery

Я пытаюсь добиться чего-то вроде следующего, но не знаю, что не так:

$.a = function() {

// some logic here

function abc(id) {
   alert('test'+id);
}


}

$.a.abc('1');

Я пытался использовать функцию возврата, но это тоже не работает. Может кто-нибудь, пожалуйста, помогите.

Спасибо за уделенное время.


person Alec Smart    schedule 30.07.2009    source источник


Ответы (1)


Поскольку $.a должна быть функцией сама по себе, вам нужно будет добавить функцию abc в качестве свойства к функции $.a:

$.a = function () {
    // some logic here...
};

$.a.abc = function (id) {
    alert('test' + id);
};

Если abc необходимо определить из функции $.a, вы можете сделать следующее. Обратите внимание, что $.a.abc будет недоступен до тех пор, пока не будет вызван $.a при использовании этого метода! Ничто внутри функции не оценивается до тех пор, пока функция не будет вызвана.

$.a = function () {

    // Do some logic here...

    // Add abc as a property to the currently calling function ($.a)
    arguments.callee.abc = function (id) {
        alert('test' + id);
    };
};

$.a();
$.a.abc('1');
person Blixt    schedule 30.07.2009
comment
но я хочу, чтобы это была функция внутри функции. я не могу изменить структуру $.a. - person Alec Smart; 30.07.2009
comment
Круто, хороший ответ! Спасибо. - person John McCollum; 16.02.2010
comment
И только потому, что я никогда раньше этого не видел, вот хорошее описание того, что делает arguments.callee: developer.mozilla.org/En/Core_JavaScript_1.5_Reference/ - person John McCollum; 16.02.2010