Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 23.08.2012, 23:56
Профессор
Отправить личное сообщение для oneguy Посмотреть профиль Найти все сообщения от oneguy
 
Регистрация: 31.05.2012
Сообщений: 396

О каком примере метода вы имеете ввиду?
Ответить с цитированием
  #12 (permalink)  
Старый 24.08.2012, 12:37
Профессор
Отправить личное сообщение для platedz Посмотреть профиль Найти все сообщения от platedz
 
Регистрация: 15.08.2012
Сообщений: 285

var one =  { m: function(arg){alert("SW"+arg+this.s);}}	
	var two = { s: "sw"}
		one.m.bind(two)(" = ")


Насколько я понял, bind передает все свойства одного объекта другому.
Как если бы s была внутри one
var one =  { s: "sw", m: function(arg){alert("SW"+arg+this.s);}}

При этом к самим свойствам можно обратиться через this, но нельзя обратиться через название самого объекта. тк. one.s

А вот такая запись мне уже непонятна,

result[method]=f.bind(topmenu, result[method]);

Можно какой-нибудь упрощенный пример такой записи. Буду крайне признателен.

Последний раз редактировалось platedz, 12.01.2013 в 22:55.
Ответить с цитированием
  #13 (permalink)  
Старый 24.08.2012, 17:21
Профессор
Отправить личное сообщение для oneguy Посмотреть профиль Найти все сообщения от oneguy
 
Регистрация: 31.05.2012
Сообщений: 396

Сообщение от platedz
Насколько я понял, bind передает все свойства одного объекта другому.
Совершенно неверно. bind не передаёт никаких свойств объектов. Он привязывает аргументы к функции.
Инструкция
one.m.bind(two)(" = ") //bind привязывает объект two в качестве аргумента this к функции one.m

эквивалентна
one.m.call(two, " = ")

Пример:
var one =  { m: function(arg){alert("SW"+arg+this.s);
  alert(JSON.stringify(this));
  alert(this===two);}}
    var two = { s: "sw"}
        one.m.bind(two)(" = ")

Как видим, при вызове функции, возвращаемой выражением one.m.bind(two) аргумент this принимает значение, равное two.
Ответить с цитированием
  #14 (permalink)  
Старый 24.08.2012, 22:15
Профессор
Отправить личное сообщение для platedz Посмотреть профиль Найти все сообщения от platedz
 
Регистрация: 15.08.2012
Сообщений: 285

К сожалению в терминалогии слаб. Пришлось поинтересоваться в том, что такое аргумент.
Насколько я понимаю, аргумент это своего рода переменная, передаваемая через функцию. func(arg1,arg2) доступная внутри функции.
Соответственно bind передает дополнительные агрументы в функцию, но не сами аргументы, а ссылку на аргументы, обратиться к которым можно через this.
Т.е. мы расширяем функцию, как бы передая ей дополнительные аргументы.
Я правильно понимаю, или нет?

Последний раз редактировалось platedz, 24.08.2012 в 22:20.
Ответить с цитированием
  #15 (permalink)  
Старый 24.08.2012, 23:35
Профессор
Отправить личное сообщение для oneguy Посмотреть профиль Найти все сообщения от oneguy
 
Регистрация: 31.05.2012
Сообщений: 396

Уже ближе, но не совсем правильно.
Аргументы - это значения (языковые значения), которые передаются функции при её вызове. В некоторых других языках программирования в функцию могут передаваться переменные, но Джаваскрипт умеет передавать только значения.
Что касается объектов, то именно ссылки на объект являются языковыми значениями, сами объекты ими не являются.
Кроме обычных аргументов в функцию передаётся также аргумент this, который доступен внутри функции под ключевым словом this.
bind привязывает к функции некоторые значения: один из них используется в качестве аргумента this, остальные (есть они есть) - в качестве обычных аргументов.
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 игнорируется

Привязанные аргументы хранятся при новой функции (возвращённой bind, в данном примере - g), старая функция (f) ничего не знает ни о них, ни о новой функции (g).

Последний раз редактировалось oneguy, 24.08.2012 в 23:43.
Ответить с цитированием
  #16 (permalink)  
Старый 25.08.2012, 00:03
Профессор
Отправить личное сообщение для platedz Посмотреть профиль Найти все сообщения от platedz
 
Регистрация: 15.08.2012
Сообщений: 285

Большое спасибо за пояснение. Пока буду считать, что все-таки суть понял. Остальное дело времени и практики.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Передача полю объекта - массиву, значения элемента через 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