В JavaScript, что выглядит как "метод" не фактически «знать», к какому объекту он привязан; по сути, это просто функция, которая, как оказалось, была сохранена как свойство некоторого объекта. Определение объекта this
будет отображаться, когда вы его вызываете, в большинстве случаев на основе объекта слева от .
в вызове.
Так что ваша переменная f
указывает на правильную функцию, но когда она вызывается, она увидит неправильное значение this
. Так как в этом случае он ожидает, что его вызывают в DOM-узле (в рабочем тесте document.body
), вызывая его вне этой области, возникает ошибка.
Обратите внимание, что приведенное выше все немного упрощено, с достаточной детализацией, чтобы объяснить ваш пример. Вероятно, вы можете найти дальнейшее чтение, выполнив поиск объяснений this
, а также call
и apply
, которые являются способами явной установки привязки функции вызова this
.
В первом фрагменте вы вызываете 'document.body.appendChild'; во втором вы пытаетесь вызвать 'document.appendChild'. Это опечатка? –
Да, это было. Благодарим за уведомление. Но вопрос сохраняется. почему не работает? –
, если вы хотите использовать 'f (i)' для выполнения 'document.body.appendChid (i)' вы можете сделать это с помощью функции: var f = function (n) {return document.body.appendChid (n)} 'также вы можете использовать 'var f = new Function ('return document.body.appendChid (n)')' –