В Javascript, если мы создаем псевдоним функции (или назначаем «ссылку на функцию» другой переменной), например, в:
f = g;
f = obj.display;
obj.f = foo;
все 3 строки выше, они будут работать до тех пор, пока функция / метод справа не коснется this
? Поскольку мы передаем все аргументы, единственный способ, которым он может испортиться, - это когда функция / метод справа использует this
?
На самом деле, строка 1, вероятно, в порядке, если g
также является свойством window
? Если g
ссылается на obj.display
, то проблема та же.
В строке 2, когда obj.display
касается this
, это означает obj
, но когда вызывается f
, this
равен window
, поэтому они различаются.
В строке 3 то же самое: когда f
вызывается внутри кода obj
, тогда this
равен obj
, тогда как foo
может использовать this
для ссылки на window
, если это было свойство window
. (глобальная функция).
Строка 2 может быть записана как
f = function() { obj.display.apply(obj, arguments) }
и строка 3:
obj.f = function() { foo.apply(window, arguments) }
Это правильный метод? И есть ли другие способы, кроме этого?