2015-08-09 1 views
2

Рассмотрим следующий код:ссылка Функция на родном предупреждение не удается с объектом недействителен вызывающего

function test() 
{ 
    return { 
     alert : function(txt){ alert(txt);} 
    } 
} 
test().alert("Boo"); 

Это будет выполнять отлично и оповещения Boo.

Следующая потерпит неудачу:

function test() 
{ 
    return { 
     alert : window.alert 
    } 
} 
test().alert("Boo"); 

Ошибка invalid calling object

Почему последний пример терпит неудачу при обращении к window.alert?

+1

последний пример не работает, потому что вы вызываете его с помощью 'invalid call object' :-) this' window.alert.bind (window) 'fix it – Grundy

ответ

1

window.alert ожидает, что окно будет привязано к this, что не будет удовлетворено, если вы его так назовете. (Т.е. test().alert будет иметь this набор, как объект, возвращаемый из test().)

Вы можете исправить это следующим образом:

return { 
    alert : window.alert.bind(window) 
} 

console.log, например, ведет себя точно так же.