Этот принцип работы
Если функция вызывается как метод объекта, это будет назначено этому объекту.
Код кода копирования следующим образом:
var parent = {
Метод: function () {
console.log (это);
}
};
parent.method ();
// <-parent
Обратите внимание, что это поведение очень «хрупкое». Это сбивает с толку большинство разработчиков.
Код кода копирования следующим образом:
Thisclowncar ();
// <-Window
Изменить это
Методы .call, .apply и .cind были использованы для управления методом вызова функций, чтобы помочь нам определить значения этого и значения параметров, передаваемых функции.
Function.prototype.call может иметь любое количество параметров.
Код кода копирования следующим образом:
Array.prototype.slice.call ([1, 2, 3], 1, 2)
// <- [2]
Function.prototype.apply аналогичен .call, но параметры, которые он передавал функции, представляют собой массив, а не какой -либо параметр.
String.prototype.split.apply ('13 .12.02 ', ['. '])
// <- ['13', '12', '02']
Function.prototype.bind создает специальную функцию, которая всегда будет использовать параметры, передаваемые .bind в качестве значения, которое можно передавать в .bind, и версию Curride, которая может распределять часть параметров и создать исходную функцию.
Код кода копирования следующим образом:
var arr = [1, 2];
var add = array.prototype.push.bind (arr, 3);
// фактически так же, как Arr.Push (3)
добавлять ();
// фактически так же, как Arr.Push (3, 4)
добавить (4);
console.log (arr);
// <- [1, 2, 3, 3, 4]
Это в цепочке доменов
В следующем примере это не сможет остаться неизменным в цепочке доменов. Это дефект правил, и он часто приводит путаницу для разработчиков -любителей.
Код кода копирования следующим образом:
Function scoping () {
console.log (это);
Return function () {
console.log (это);
};
}
scoping () ();
// <-Window
// <-Window
Существует общий метод для создания локальной переменной для поддержания ссылки на это, и в домене подразделения не должно быть жизненных переменных. Переменные с тем же именем в подкопе будут охватывать ссылку на это в родительском счете. http://www.cnblogs.com/sosoft/
Код кода копирования следующим образом:
Функция сохранения () {
var seelf = this;
Return function () {
console.log (self);
};
}
Поддерживать () ();
// <-Window
Если вы действительно не хотите использовать это из родительского масштаба одновременно и текущего этого значения, по некоторым необъяснимым причинам, я предпочитаю использовать функцию метода. Знака. Это может быть использовано для указания родительского прицела для обозначения подзадачи.
Код кода копирования следующим образом:
function up () {) {)
Return function () {
console.log (это);
} .Bind (это);
}
перерыв () ();
// <-Window