Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Почему через точку не работает? Метод call и this

Не Вася и не Петя Мудрец (13340), закрыт 9 лет назад
var user = {
firstName: "Василий",
surname: "Петров",
patronym: "Иванович"
};

function showFullName(firstPart, lastPart) {
alert( this.firstPart + " " + this.lastPart );
}

showFullName.call(user, 'firstName', 'surname') // "Василий Петров"
showFullName.call(user, 'firstName', 'patronym') // "Василий Иванович"

А вот так работает

function showFullName(firstPart, lastPart) {
alert( this[firstPart] + " " + this[lastPart] );
}
Лучший ответ
Николай Веселуха Высший разум (382151) 9 лет назад
// а так не пробовали?

function Person(name, patronymic, surname) {
this.name = name;
this.patronymic = patronymic;
this.surname = surname;
}

Person.prototype = {
constructor: Person,
fullName: function () {
return this.surname + ' ' + this.name + ' ' + this.patronymic;
}
};

var ivanov = new Person('Сергей', 'Кузьмич', 'Иванов');
var petrov = new Person('Иван', 'Фомич', 'Петров');

console.log(ivanov.fullName());
console.log(petrov.fullName());
Остальные ответы
Muslim Abdullah Мастер (1000) 9 лет назад
Очевидо потому что строка не может быть использована в качестве идентификатора.
В обращении через квадратные скобки как раз используется строка (даже если число будет передано, оно будет автоматически преобразовано в строку).
MetotronИскусственный Интеллект (114989) 9 лет назад
f = {'string': 12}
alert(f['string'])

может
MetotronИскусственный Интеллект (114989) 9 лет назад
Или я тебя не так понял, и ты хотел написал то же, что и я.
Muslim Abdullah Мастер (1000) В функцию передается строка, поэтому получается this.'string' - и это не будет работать this['sting'] - будет
Илья Ш Просветленный (20967) 9 лет назад
так задумано производителем )
Metotron Искусственный Интеллект (114989) 9 лет назад
Это потому что когда ты вызываешь this.firstPart, подразумевается this['firstPart'], а не this[firstPart]
Похожие вопросы