Вы не наследуете, когда используете call
таким образом.Вы передаете экземпляр и получаете тот же экземпляр с некоторыми изменениями:
const funcA = function(firstName) {
this.firstName = firstName;
this.getFirstName = function() {
return 'My name is ' + this.firstName;
};
return this;
};
const objA = new funcA('Rodrigo');
const funcB = function (lastName) {
this.lastName = lastName;
this.getLastName = function() {
return 'My last name is ' + this.lastName;
};
return this;
};
const objC = funcB.call(objA,'Erades');
// ObjC IS ObjaA
console.log(objC === objA)
Когда вы используете call
, переданный объект становится this
функции.Затем вы добавляете некоторые свойства и возвращаете this
, который является тем же объектом, который вы только что передали.
Передача функции в call()
не отличается.Когда вы пишете:
funcB.call(funcA,'Alonso');
, вы вызываете функцию funcB
с Alonso
в качестве аргумента.Внутри этой функции this
будет ссылаться на funcA
.Таким образом, вы установите свойство lastName
для свойств funcA
и getLastName
, указывающее на функцию, а затем вернете funcA
, которое затем будет присвоено переменной funcC
.funcC
и funcA
указывают на одну и ту же функцию.
const funcA = function(firstName) {
this.firstName = firstName;
this.getFirstName = function() {
return 'My name is ' + this.firstName;
};
return this;
};
const funcB = function (lastName) {
this.lastName = lastName;
this.getLastName = function() {
return 'My last name is ' + this.lastName;
};
return this;
};
const funcC = funcB.call(funcA,'Alonso');
// the same reference
console.log(funcC === funcA)
// but when you called funcB with it, it added some properties:
console.log("funC lastname:", funcC.lastName)
// they are the same object so this also works:
console.log("also funcA lastname:", funcC.lastName)