О каком примере метода вы имеете ввиду?
|
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]); Можно какой-нибудь упрощенный пример такой записи. Буду крайне признателен. |
Цитата:
Инструкция 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. |
К сожалению в терминалогии слаб. Пришлось поинтересоваться в том, что такое аргумент.
Насколько я понимаю, аргумент это своего рода переменная, передаваемая через функцию. func(arg1,arg2) доступная внутри функции. Соответственно bind передает дополнительные агрументы в функцию, но не сами аргументы, а ссылку на аргументы, обратиться к которым можно через this. Т.е. мы расширяем функцию, как бы передая ей дополнительные аргументы. Я правильно понимаю, или нет? |
Уже ближе, но не совсем правильно.
Аргументы - это значения (языковые значения), которые передаются функции при её вызове. В некоторых других языках программирования в функцию могут передаваться переменные, но Джаваскрипт умеет передавать только значения. Что касается объектов, то именно ссылки на объект являются языковыми значениями, сами объекты ими не являются. Кроме обычных аргументов в функцию передаётся также аргумент 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). |
Большое спасибо за пояснение. Пока буду считать, что все-таки суть понял. Остальное дело времени и практики.
|
Часовой пояс GMT +3, время: 13:49. |