Метод 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, время: 19:24. |