Под глобальным масштабом
этот;
При использовании этого в глобальном объеме он указывает на глобальный объект.
Вот подробное введение в глобальный объект:
Global Object - это объект, который был создан до введения какого -либо контекста выполнения;
Существует только одна копия этого объекта, и его свойства можно получить в любом месте программы. Жизненный цикл глобального объекта заканчивается в настоящее время, когда программа выходит.
На начальном этапе создания глобального объекта, математика, строка, дата, parseint инициализируются в виде собственных атрибутов и т. Д., И другие дополнительные объекты также могут быть созданы в качестве атрибутов (которые могут указывать на сам глобальный объект). Например, в DOM свойство окна глобального объекта может относиться к самому глобальному объекту.
Так что это то же самое, что и это. Винтовые в консоли.
При вызове функции
foo ();
Здесь это также указывает на глобальный объект.
При вызове метода
test.foo ();
В этом примере это будет указывать на тестовый объект.
При вызове конструктора
новый foo ();
Функция используется с новым ключевым словом, когда мы называем конструктор. В настоящее время, в рамках функции, это указывает на недавно созданный объект.
Когда явно устанавливается
function foo (a, b, c) {} // var bar = {}; foo.apply (bar, [1, 2, 3]); // массив будет расширяться до нижефу. Калл (бар, 1, 2, 3); // приводит к a = 1, b = 2, c = 3При использовании методов Apply и вызовов функции.
Следовательно, в отличие от правил при вызове функции, это в приведенном выше примере указывает на стержень.
Вот методы вызова и применения:
Метод вызова :
Синтаксис: Call ([thisObj [, arg1 [, arg2 [, [, .argn]]]]])
Определение: вызовите метод объекта, чтобы заменить текущий объект другим объектом.
Применить метод :
Синтаксис: применить ([thisobj [, argarray]])
Определение: примените один метод определенного объекта и замените текущий объект другим объектом.
Здесь мы должны отметить, что это нельзя использовать, чтобы указать на сам объект, когда объект буквально объявлен. следующее:
var obj = {me: это}Здесь это не будет указывать на OBJ, и применение этого ограничено вышеуказанными пятью ситуациями.
Суммировать
Хотя вышеупомянутая ситуация в основном является значимой, это во втором случае (то есть при вызове функции) на самом деле редко полезно, что считается еще одной ошибкой в дизайне JavaScript.
Foo.method = function () {function test () {// Это установлено на глобальный объект} test ();}Как мы упоминали выше, это здесь будет указывать на глобальный объект, а не на функцию Foo.
Чтобы получить способ указать на Foo в тесте, нам нужно создать локальную переменную внутри метода, указывающего на Foo.
Foo.method = function () {var that = this; function test () {// Использовать это вместо этого здесь} test ();}Это просто нормальное имя переменной, но оно часто используется, чтобы указать на этот внешний вид.
Есть еще одна интересная вещь, связанная с псевдонимом функции, то есть, когда метод назначен переменной.
var test = someObject.methodtest; test ();
В приведенном выше примере тест будет рассматриваться как нормальная функция, поэтому в соответствии со вторым случаем (то есть при вызове функции), это будет указывать на глобальную переменную, а не на какой -то.
Хотя это позднее обязательное обязательство сначала кажется плохим решением, на самом деле это основа прототипа наследования.
function foo () {} foo.prototype.method = function () {}; function bar () {} bar.prototype = foo.prototype; new bar (). method ();На этом этапе, когда метод будет вызван, он будет указывать на объект экземпляра бара.