Позвольте мне шаг за шагом объяснить, что происходит в вашем фрагменте кода:
- Вы объявляете переменную
bike
и присваиваете ей ссылку на эту функцию:
function() {
console.log(this.name);
}
Вы объявляете переменную
originalBikeFun
и присваиваете
reference для функции, описанной выше. На данный момент у вас есть две переменные
bike
и
originalBikeFun
, которые указывают только на одну область памяти, в которой хранится ваша функция. Вы присваиваете (
разыменование ) переменной
bike
this новая функция:
function() {
originalBikeFun.call(obj1);
}
В этот момент у вас есть переменная bike
, указывающая на эту функцию:
function() {
originalBikeFun.call(obj1);
}
и переменная originalBikeFun
, указанная на ранее назначенную функцию:
function() {
console.log(this.name);
}
При вызове функции
bike
выполняются следующие строки кода:
a) originalBikeFun.call(obj1);
b) console.log(this.name);
Таким образом, результатом этого вызова является "Pulsar".
Когда вы вызываете
bike.call(obj2)
, разница между предыдущим вызовом функции заключается в том, что вы просто передаете
obj2
как указатель
this
, но поскольку в функции
bike
у вас есть только один вызов с переназначением указателя
this
, то есть нет разницы.