Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Метод call и this (https://javascript.ru/forum/misc/62052-metod-call-i.html)

DivMan 22.03.2016 14:53

Метод 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') // "Василий Иванович"

nerv_ 22.03.2016 17:42

Потому, что в данном случае должна использоваться другая нотация:
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#д...�-скобки

DivMan 14.08.2016 17:05

Почему не складываются аргументы?

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))

Decode 15.08.2016 00:33

DivMan, цикл надо начинать с i = 1.

DivMan 15.08.2016 05:18

почему с 1?

nerv_ 15.08.2016 08:08

потому, что аргументы не пробросил
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.