`apply` не работает для функции как свойства объекта - PullRequest
1 голос
/ 17 января 2012

Согласно книге шаблонов JavaScript (стр. 79), это должно работать:

 var ob = {
    fn: function foo(m) {alert(m);}
 };
 fn.apply(ob,['m']);

Это не работает.

fn is not defined выдана ошибка.

Эти 2 работают нормально:

ob.fn.apply(ob,['m']);

и

ob.fn.apply(null,['m']);

Почему просто fn.apply(ob,['m']) не работает? Не могу получить.

Ответы [ 2 ]

4 голосов
/ 17 января 2012

fn не определено в глобальной области видимости. Это член ob. Если это из книги, это опечатка.

4 голосов
/ 17 января 2012

fn не работает, потому что это не переменная в области видимости. Если был определен window.fn, или var fn был определен в другом месте, вы могли бы получить к нему доступ как fn.apply. Поскольку ни один из них не определен, вам необходимо использовать полный путь к функции на объекте:

ob.fn.apply(...);

Если вы хотите определить fn, вы можете просто установить его:

var ob,
    fn;

ob = {
  fn:function(){...}
};
fn = ob.fn;

fn.apply(ob, ...);
...