Я использовал это во время интервью несколько дней назад. Интервьюер сказал, что мое понимание было немного предвзятым. Я вернулся, чтобы прочитать книгу и несколько блогов, и сделал несколько тестов. Я обнаружил, что мое понимание было действительно неправильным.
1. Глобальные переменные
Это должно быть наиболее часто используемым. Вызовите это в функции, и это на самом деле глобальная переменная
var value = "0"; function mei () {var value = "1"; console.log (this.value); // 0 console.log (значение); // 1} mei ();Вывод равен 0, потому что это указывает на глобальный
2. Конструктор
Это использование, с которым я больше знаком. Используйте это в конструкторе. После нового нового объекта это указывает на этот новый объект.
var value = "window"; function mei () {this.value = 1; this.show = function () {console.log (this.value)}} var m = new mei (); Console.log (M.Value); // 1 M.Show (); // 1Вы можете видеть, что вывод 1 вместо окна. Видно, что из -за конструктора это указывает на новый объект вместо глобальной переменной.
3. Нанесите и примените
Занять примеры из моего блога и применить напрямую
var p = "456"; функция f1 () {this.p = "123"; } function f2 () {console.log (this.p); } f2 (); // 456 f2.call (f1 ()); // 123 f2.apply (f1 ()); // 123Вывод первой строки легко понять. Это указывает на глобальный. 123 - это потому, что после использования Call или Apply, это в точках F2 до F1, а P в F1 - 123. Пожалуйста, нажмите на сообщение в блоге для получения подробной информации.
4. Функция вызывается как метод объекта (где я допустил ошибку)
В то время я попросил меня написать объект с несколькими методами. Я определил глобальную переменную в своем уме, а затем назвал это в методе объекта. Интервьюер спросил меня, что это? Я сказал, что это должно быть окно, потому что я очень мало использовал этот метод и думал, что только новый или звонок изменит направление этого, поэтому он сказал, что это неправильно, и попросил меня вернуться и увидеть это сам. Теперь я попробовал это, я действительно не прав. Разместите код
var value = "отец"; function mei () {} mei.value = "Child"; mei.get = function () {console.log (this.value)}; mei.show = function () {console.log (value)}; mei.get (); // Child mei.show (); //отецПоскольку GET называется методом MEI, это указывает на MEI.value So выходной ребенок
Что касается отца, я так понимаю. Функция, на которую указывает SHOW, определена в глобальной среде. Из -за цепочки объема в шоу не найдено значение, поэтому я определяю его окружающую среду и нахожу ее. Это находит глобальную ценность. Если здесь есть ошибка в понимании, я надеюсь, что друг сможет указать на это!