Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 22.03.2016, 14:53
Профессор
Отправить личное сообщение для DivMan Посмотреть профиль Найти все сообщения от DivMan
 
Регистрация: 08.03.2016
Сообщений: 429

Метод 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') // "Василий Иванович"
Ответить с цитированием
  #2 (permalink)  
Старый 22.03.2016, 17:42
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

Потому, что в данном случае должна использоваться другая нотация:
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#д...-скобки
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Ответить с цитированием
  #3 (permalink)  
Старый 14.08.2016, 17:05
Профессор
Отправить личное сообщение для DivMan Посмотреть профиль Найти все сообщения от DivMan
 
Регистрация: 08.03.2016
Сообщений: 429

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

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))
Ответить с цитированием
  #4 (permalink)  
Старый 15.08.2016, 00:33
Профессор
Отправить личное сообщение для Decode Посмотреть профиль Найти все сообщения от Decode
 
Регистрация: 31.01.2015
Сообщений: 576

DivMan, цикл надо начинать с i = 1.
Ответить с цитированием
  #5 (permalink)  
Старый 15.08.2016, 05:18
Профессор
Отправить личное сообщение для DivMan Посмотреть профиль Найти все сообщения от DivMan
 
Регистрация: 08.03.2016
Сообщений: 429

почему с 1?
Ответить с цитированием
  #6 (permalink)  
Старый 15.08.2016, 08:08
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

потому, что аргументы не пробросил
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));
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук

Последний раз редактировалось nerv_, 15.08.2016 в 08:11.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
метод call, кто знает? imedia Элементы интерфейса 1 08.12.2014 01:14
Объект не поддерживает это свойство или метод load_081112_0953.js 1auto1 Общие вопросы Javascript 1 13.04.2011 22:09
Объект не поддерживает это свойство или метод load_081112_0953.js 1auto1 Internet Explorer 1 13.04.2011 21:59
метод call() - ошибка ( mrValter AJAX и COMET 1 31.07.2009 11:09
Добавить свой метод к элементу alekciy Events/DOM/Window 6 16.02.2009 19:29