получить доступ к переменной javascript из другого скрипта - PullRequest
2 голосов
/ 08 декабря 2011

У меня есть следующая структура

// script1.js

jQuery(document).ready(function($) {
    var somevar;
    $('somelem').myPlugin();
});


// script2.js

(function($) {
    $.fn.myPlugin = function(options) {

        // access and modify 'somevar' here so that it gets modified
        // in the function which called a plugin

    };
});
  • Я хочу, чтобы переменная somevar изменялась плагином, и я мог бы работать с уже измененной переменной дальше в области действия вызывающей функции плагина.
  • Я не хочу использовать глобальную переменную.
  • Я не вижу смысла передавать переменную в качестве опции для плагина, так как она станет локальной для функции плагина, а модификация не изменитисходная переменная, насколько я понимаю.
  • Я могу неправильно понять концепцию работы javascript, поэтому любой ответ приветствуется.

Ответы [ 4 ]

2 голосов
/ 08 декабря 2011

Когда вы передаете примитивный тип, он передается по значению. Но если вы передадите объект, он будет передан по ссылке. Итак, вы можете сделать это -

jQuery(document).ready(function($) {
    var somevar = {val: 5};
    $(document).myPlugin(somevar);
    alert(somevar.val);
});


// script2.js

(function($) {
    $.fn.myPlugin = function(options) {
        options.val ++;
        // access and modify 'somevar' here so that it gets modified
        // in the function which called a plugin

    };
})(jQuery);

посмотреть демо-версию :: http://jsfiddle.net/rifat/EdRFm/

0 голосов
/ 08 декабря 2011

вы можете создать одноэлементный класс для ваших глобальных переменных.

0 голосов
/ 08 декабря 2011

Вы можете позволить функции плагина возвращать значение и присваивать его somevar

somevar = $('someelem').myPlugin();

Или вы можете передать обратный вызов в качестве параметра в свой метод плагина

// Script 1
var somevar;
$('someelem').myPlugin(function(newValue) {
    somevar = newValue;
});

// Script 2
$.fn.myPlugin = function(callback) {
    ...
    callback(newValueForSomeVar);
}
0 голосов
/ 08 декабря 2011

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

//script1.js

var somevar;

function setSomevar(value){
somevar = value;
}

function getSomevar(){
return somevar;
}

jQuery(document).ready(function($) {
$('somelem').myPlugin();
});

Теперь вы можете вызвать функцию setSomevar и передать значение в переменную. Надеюсь, это поможет. С уважением.

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