2012-01-17 3 views
1

Согласно JavaScript Patterns book, это должно работать:`apply` не работает функция как свойство объекта

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

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

fn is not defined ошибка брошена.

Эти 2 работы OK:

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

и

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

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

ответ

4

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

ob.fn.apply(...); 

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

var ob, 
    fn; 

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

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

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