Метод call и this
Почему через точку не работает?
var user = { firstName: "Василий", surname: "Петров", patronym: "Иванович" }; function showFullName(firstPart, lastPart) { alert( this.firstPart + " " + this.lastPart ); } showFullName.call(user, 'firstName', 'surname') // "Василий Петров" showFullName.call(user, 'firstName', 'patronym') // "Василий Иванович" |
Потому, что в данном случае должна использоваться другая нотация:
var user = {
firstName: "Василий",
surname: "Петров",
patronym: "Иванович"
};
function showFullName(firstPart, lastPart) {
alert(this[firstPart] + " " + this[lastPart]);
}
showFullName.call(user, 'firstName', 'surname') // "Василий Петров"
showFullName.call(user, 'firstName', 'patronym') // "Василий Иванович"
http://learn.javascript.ru/object#д...-скобки |
Почему не складываются аргументы?
let o = {
origin: 100
}
let o2 = {
origin: 200
}
function sum(){
let megaFunc = function(){
let origin = this.origin;
for(var i =0; i < arguments.length; i++){
origin += arguments[i]
}
return origin
}
return megaFunc.call(o)
}
console.log(sum.call(o, 2,3))
|
DivMan, цикл надо начинать с i = 1.
|
почему с 1?
|
потому, что аргументы не пробросил
let o = {
origin: 100
}
let o2 = {
origin: 200
}
function sum(...args){
let megaFunc = function(){
let origin = this.origin;
for(var i =0; i < args.length; i++){
origin += args[i];
}
return origin;
}
return megaFunc.call(this);
}
console.log(sum.call(o, 2,3));
console.log(sum.call(o2, 2,3));
или
let o = {
origin: 100
}
let o2 = {
origin: 200
}
function sum(){
let megaFunc = function(){
let origin = this.origin;
for(var i =0; i < arguments.length; i++){
origin += arguments[i];
}
return origin;
}
return megaFunc.apply(this, arguments);
}
console.log(sum.call(o, 2,3));
console.log(sum.call(o2, 2,3));
|
| Часовой пояс GMT +3, время: 23:57. |