Как обратиться к переменной внутри объекта, в произвольной функцию через его метод
Даже не знаю как спросить.
obj = function() { var elem = "Элемент"; return { functio: function(f) { f(); return this; } } }(); obj.functio(function(){alert(elem);}); Нужно чтобы alert вывел elem который находится внутри объекта. Можно ли как - то так сделать? |
Возможно, вам нужен метод Function.prototype.bind? Он позволяет привязать аргумент this и обычные аргументы к функции динамически.
|
Возможно, но я честно говоря не нашел никакой полезной информации в яндексе по запросу prototype.bind и Function.prototype.bind. Подскажите, пожалуйста, как этот метод работает.
|
Цитата:
|
Спасибо. Попробую с помощью переводчика разобраться. Может где-то есть русскоязычная информация и в более доступной форме. Или кто-то объяснит на простом примере. Да и с прототипами у меня пока еще крайне туго.
|
Я потом нашёл это в нашем учебнике - вторая ссылка в моём предыдущем сообщении.
|
Короче, попробую объяснить своими словами.
Функция Function.prototype.bind имеет синтаксис function (thisArg [, arg1, arg2, ... ]) где thisArg - привязанный аргумент this; arg1, arg2, ... (если есть) - привязанные обычные аргументы. При этом исходная функция передаётся в качестве аргумента this. Данная функция возвращает новую функцию особого типа - не имеющюю своего кода, а имеющую внутренний указатель на исходную функцию, привязанный аргумент this и обычные аргументы (если есть) в качестве своих внутренних свойств. При вызове этой новой функции вызывается привязанная исходная функция, передаётся привязанный аргумент this в качестве аргумента this (раннее переданного как thisArg) вместо стандартной процедуры определения this, передаётся список аргументов состоящий из привязанных агрументов (раннее переданных как arg1, arg2, ...) и аргументов (новых аргументов), переданных в новую функцию. Новые аргументы идут в списке после привязанных аргументов. Простой пример: function f (a, b, c) { alert(this+" "+a+" "+b+" "+c); } var g=f.bind(42, 1, 2); // привязываем 42 в качестве this; 1, 2 в качестве обычных аргументов g(3); // 3 - новый аргумент в функцию f g.call(43, 3); //переданный явно аргумент this игнорируется |
platedz,
никак вы не получите доступ — elem приватное свойство. |
tadjik1,
Сам по себе elem равен пустоте obj = function() { var elem = []; return { teg: function(name) { elem = document.querySelectorAll(name); return this; }, functio: function(f) { f(); return this; } } }(); obj.teg("div").functio(function(){alert(elem);}); В принципе тут и надо к нему как то обратиться. |
Почитал про bind. В примере с функцией вроде понятно, а вот на примере метода до меня никак не доходит. Может кто-нибудь даст пару простых примеров с объяснениями. Буду крайне признателен.
|
Часовой пояс GMT +3, время: 08:01. |