Давайте сначала посмотрим на официальное объяснение о Call (), «вызов один метод объекта и заменив текущий объект другим объектом». Прочитав это объяснение, вы можете быть еще более запутанным. Смотрите пример:
Кода -копия выглядит следующим образом:
var x = "Я глобальная переменная"; // определить глобальную переменную x
Функция a () {// определить структуру класса функции a
this.x = "Я объявил это в структуре класса функции A";
}
// Определите нормальную функцию и всплывает значение переменной x, содержащейся в текущем указателе.
функция f () {
оповещение (this.x);
}
// возвращаемое значение: «Я объявил в структуре класса функций A»
f.call (new a ());
Насколько я понимаю, f.call (new a ()) предназначен для копирования функции (на самом деле объект) f на вызывающий объект «новый a ()» для анализа. На самом деле, это то же самое, что и результат анализа следующего кода:
Кода -копия выглядит следующим образом:
функция a () {
this.x = "Я объявил это в структуре класса функции A";
оповещение (this.x);
}
a ();
Просто объем переменной x в настоящее время отличается. Да ... Кажется, у него немного наследства, не так ли? В приведенном выше примере F полностью унаследован объектом прочности конструктора a. Если этого недостаточно, чтобы показать, что A.Call (B) является режимом наследования, то давайте посмотрим на более наследственное использование.
Кода -копия выглядит следующим образом:
функция f () {
this.a = "a";
this.b = function () {
оповещение ("B");
}
}
функция e () {
f.call (это);
}
var c = new e ();
предупреждение (CA); // popt a
cb (); // popt b
В этом примере, пока друзья, которые знают, как использовать браузер, они могут видеть, что E полностью наследует свойства и методы F, в противном случае это не будет объяснено, поскольку атрибуты A и B не определены в E. Затем, согласно здравому смыслу, эти два свойства не будут отображаться в объекте экземпляра C e.