Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 23.08.2012, 01:26
Профессор
Отправить личное сообщение для platedz Посмотреть профиль Найти все сообщения от platedz
 
Регистрация: 15.08.2012
Сообщений: 285

Как обратиться к переменной внутри объекта, в произвольной функцию через его метод
Даже не знаю как спросить.
obj = function()
	{
		var elem = "Элемент";
		
		return {
		
				functio: function(f)
					{
					
						f();
				
						return this;
				
					}
				}
		}();
 
obj.functio(function(){alert(elem);});


Нужно чтобы alert вывел elem который находится внутри объекта. Можно ли как - то так сделать?
Ответить с цитированием
  #2 (permalink)  
Старый 23.08.2012, 01:34
Профессор
Отправить личное сообщение для oneguy Посмотреть профиль Найти все сообщения от oneguy
 
Регистрация: 31.05.2012
Сообщений: 396

Возможно, вам нужен метод Function.prototype.bind? Он позволяет привязать аргумент this и обычные аргументы к функции динамически.
Ответить с цитированием
  #3 (permalink)  
Старый 23.08.2012, 02:09
Профессор
Отправить личное сообщение для platedz Посмотреть профиль Найти все сообщения от platedz
 
Регистрация: 15.08.2012
Сообщений: 285

Возможно, но я честно говоря не нашел никакой полезной информации в яндексе по запросу prototype.bind и Function.prototype.bind. Подскажите, пожалуйста, как этот метод работает.
Ответить с цитированием
  #4 (permalink)  
Старый 23.08.2012, 02:36
Профессор
Отправить личное сообщение для oneguy Посмотреть профиль Найти все сообщения от oneguy
 
Регистрация: 31.05.2012
Сообщений: 396

Сообщение от platedz
Возможно, но я честно говоря не нашел никакой полезной информации в яндексе по запросу prototype.bind и Function.prototype.bind. Подскажите, пожалуйста, как этот метод работает.
Здесь можно прочитать: https://developer.mozilla.org/en-US/.../Function/bind, если владеете английским. В учебнике тоже есть статья: http://learn.javascript.ru/bind#%D1%...%BE%D0%B4-bind. Метод bind, однако, не работает в IE<9.

Последний раз редактировалось oneguy, 23.08.2012 в 02:45.
Ответить с цитированием
  #5 (permalink)  
Старый 23.08.2012, 02:51
Профессор
Отправить личное сообщение для platedz Посмотреть профиль Найти все сообщения от platedz
 
Регистрация: 15.08.2012
Сообщений: 285

Спасибо. Попробую с помощью переводчика разобраться. Может где-то есть русскоязычная информация и в более доступной форме. Или кто-то объяснит на простом примере. Да и с прототипами у меня пока еще крайне туго.
Ответить с цитированием
  #6 (permalink)  
Старый 23.08.2012, 02:55
Профессор
Отправить личное сообщение для oneguy Посмотреть профиль Найти все сообщения от oneguy
 
Регистрация: 31.05.2012
Сообщений: 396

Я потом нашёл это в нашем учебнике - вторая ссылка в моём предыдущем сообщении.
Ответить с цитированием
  #7 (permalink)  
Старый 23.08.2012, 03:03
Профессор
Отправить личное сообщение для oneguy Посмотреть профиль Найти все сообщения от oneguy
 
Регистрация: 31.05.2012
Сообщений: 396

Короче, попробую объяснить своими словами.
Функция 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 игнорируется

Последний раз редактировалось oneguy, 23.08.2012 в 03:28.
Ответить с цитированием
  #8 (permalink)  
Старый 23.08.2012, 12:35
Профессор
Отправить личное сообщение для tadjik1 Посмотреть профиль Найти все сообщения от tadjik1
 
Регистрация: 07.06.2011
Сообщений: 315

platedz,
никак вы не получите доступ — elem приватное свойство.
Ответить с цитированием
  #9 (permalink)  
Старый 23.08.2012, 23:41
Профессор
Отправить личное сообщение для platedz Посмотреть профиль Найти все сообщения от platedz
 
Регистрация: 15.08.2012
Сообщений: 285

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);});

В принципе тут и надо к нему как то обратиться.
Ответить с цитированием
  #10 (permalink)  
Старый 23.08.2012, 23:44
Профессор
Отправить личное сообщение для platedz Посмотреть профиль Найти все сообщения от platedz
 
Регистрация: 15.08.2012
Сообщений: 285

Почитал про bind. В примере с функцией вроде понятно, а вот на примере метода до меня никак не доходит. Может кто-нибудь даст пару простых примеров с объяснениями. Буду крайне признателен.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Передача полю объекта - массиву, значения элемента через set метод poorking Общие вопросы Javascript 1 13.02.2011 20:22
Обработка события элемента внутри создавшего его объекта pauluss Общие вопросы Javascript 10 10.09.2010 17:01
Как в JavaScript присвоить функцию свойству объекта? kokon Общие вопросы Javascript 5 25.05.2010 22:11
как обратиться к childNode по его id в div-е, через id родителя kichSman Events/DOM/Window 5 28.10.2009 02:16
Можно ли получить имя экземпляра объекта внутри самого объекта? Ichigeki Общие вопросы Javascript 9 14.11.2008 19:00