Этот объект всегда был ловушку в JS, и трудно судить, на что он указывает. Мы часто совершаем такие ошибки из -за нашего опыта от C ++ или Python. Далее, давайте подробно поговорим об собственности на этот объект.
Правило1: это в глобальной среде
Среда JavaScript по своей природе определяется функциями. В JS контекст не может быть разделен кодовыми блоками. Окружающая среда, которая не обернута функциями, является глобальной средой. Это в глобальной среде указывает на глобальное окно переменной. См. Следующий пример
Кода -копия выглядит следующим образом:
var name = 'jjj';
console.log (this.name);
// JJJ будет успешно выходить
Правило 2: это, когда называется как метод
Очевидно, что эта ситуация легко судить, она согласуется с собой в Python. Это, несомненно, указывает на объект, который вызывает метод
Кода -копия выглядит следующим образом:
var user = {
Имя: 'KKK'
};
user.getName = function () {
console.log (this.name);
};
user.getName ();
// выходной KKK будет выходить
Правило 3: это когда в качестве конструктора
Мне не нужно много говорить об этом в это время. Это, очевидно, указывает на недавно созданный объект. Операция конструктора на самом деле не создает объект, а просто инициализация. Объект создается до его запуска.
Вот несколько примеров
Кода -копия выглядит следующим образом:
Пользователь функции (имя) {
this.name = name;
}
var f1 = новый пользователь ('kkk');
var f2 = user ('kkk');
Console.log (f1.name); // kkk
console.log (f2.name); // не определено. не имеет атрибута имени
Правило4: этот косвенный звонок
Так называемый непрямой вызов относится к использованию Apply и вызовов для вызова функций, и этот точки первого параметра в их списке параметров.
Кода -копия выглядит следующим образом:
var setName = function (name) {
this.name = name;
};
var user = {level: 2};
user.apply (setName, 'jjj');
console.log (user.name); // jjj
Правило 5: это в других случаях
Помните, что это не будет изменено в других ситуациях, и это также самое простое место для ошибок.
Кода -копия выглядит следующим образом:
var name = "умный кодировщик";
var person = {
Название: «Фукодер»,
Hello: function (sth) {
var sayshello = function (sth) {
console.log (this.name + »говорит« + sth);
};
Sayhello (STH);
}
}
ЧЕЛОВЕК.HELLO ("Привет, мир"); // Умный кодировщик говорит Hello World
Приведенный выше код выглядит странно, разве это не должно человека для человека?
Мы должны помнить, что это в вложенной функции не будет указывать на функцию, которая ее гневает. В этом примере это в Sayshello не будет указывать на функцию, соответствующую Hello. Если мы немного изменим пример
Кода -копия выглядит следующим образом:
Hello: function (sth) {
console.log (this.name + »говорит« + sth);
}
// Фукодер говорит привет миру
Каждый должен был понять, что в настоящее время Сэйелло не призывает как метод, поэтому это указывает на глобальный объект. Полем Полем
В настоящее время проблема заключается в том, что первоначальный пример использования узла для запуска покажет неопределенное «Hello World». Интересно, есть ли какой -нибудь мастер, чтобы объяснить это.
Правило 6: Eval нарушает все правила
Наконец -то заканчивается примером
Кода -копия выглядит следующим образом:
var name = "умный кодировщик";
var user = {
Имя: 'KKK'
};
user.getName = function () {
console.log (this.name);
};
var get = user.getName;
get (); // Умный кодер
Вы понимаете?