Пытаясь понять «это» ключевое слово в JavaScript, я смотрел на многих ресурсах, в том числе ответы на этот популярный переполнением стека вопрос: How does the "this" keyword work?Почему «это» обрабатывается по-разному при использовании с объектами функций?
Я не знаю, если я что-то недоразумение, но все, что я прочитал, кажется неполным и отсутствует правило: Хотя функции являются объектами, «это» обрабатывается по-разному для объектов-объектов по сравнению с другими объектами.
Рассмотрим следующий код:
var object = {};
object.name = "object";
object.logMyName = function() {
console.log(this.name);
};
object.logMyName();
Поскольку функция («logMyName») вызывается на объект («объект»), «этот» установлен в положение объекта («объект»), на которой вызывается функция ('logMyName').
Теперь рассмотрим следующий код:
var funcObject = function() {};
funcObject.name = "funcObject";
funcObject.logMyName = function() {
console.log(this.name);
};
funcObject.logMyName();
Хотя функция ('logMyName') был вызван на объект ('funcObject'), 'это' является не набор к объекту ('funcObject '), на который была вызвана функция (' logMyName ').
Почему это несоответствие между типами объектов существует и почему это редко или никогда не обсуждалось?
2-й пример кода использует анонимную функцию. Когда я отбрасываю этот код в jsfiddle, то «this.name» возвращается пустым. Свойство name отображается только для чтения и не может быть установлено с помощью функции funcObject.name = funcObject, ' – Clomp