Передача параметра в качестве указателя в JavaScript - PullRequest
6 голосов
/ 03 декабря 2009

Взгляните на следующий код:

var o;

(function (p) {
    p = function () {
        alert('test');
    };
})(o);

o(); // Error: 'o is not a function'

В вышеупомянутой функции я создаю анонимную функцию, которая принимает один параметр, который самостоятельно вызывается с ранее созданным объектом, переданным в качестве параметра. Затем я указываю этот объект на функцию (изнутри новой области видимости) и в конечном итоге (пытаюсь) вызвать его извне.

Мой вопрос: как я могу передать этот аргумент «по ссылке», чтобы изменить указатель, на который он указывает?

Ответы [ 3 ]

12 голосов
/ 03 декабря 2009

Вы можете достичь желаемого эффекта, воспользовавшись тем, что Javascript передает объекты по ссылке:

var o = { };

(function (p) {
    p.fn = function () {
        alert('test');
    };
})(o);

o.fn();
3 голосов
/ 03 декабря 2009

Вам лучше использовать язык по назначению, чем пытаться согнуть его, чтобы он соответствовал идиомам, которые имеют смысл только в языке, построенном в соответствии с другим набором принципов.

var o = (function(p) {
    return function() {
        alert('test');
    };
})();

o();
1 голос
/ 03 декабря 2009

Когда вы передаете переменную o в своем примере, вы передаете неопределенное значение, а не ссылку на что-либо. Что вам нужно сделать, это отправить объекты родительского объекта. В этом случае объект окна (при условии, что вы используете браузер).

(function (p, name) {
    p[name] = function() {
       alert('test');
    };
})(window, "o");
o();

Это передает объект окна и имя вашей новой функции. Затем он назначает вашу функцию окну, и теперь она доступна для вызова. Если вы не собираетесь использовать замыкания, я бы предложил просто назначить функцию напрямую.

function o() {
    alert('test');
};
o();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...