Почему через точку не работает? Метод 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') // "Василий Иванович"
А вот так работает
function showFullName(firstPart, lastPart) {
alert( this[firstPart] + " " + this[lastPart] );
}
// а так не пробовали?
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());
так задумано производителем )
Это потому что когда ты вызываешь this.firstPart, подразумевается this['firstPart'], а не this[firstPart]
Очевидо потому что строка не может быть использована в качестве идентификатора.
В обращении через квадратные скобки как раз используется строка (даже если число будет передано, оно будет автоматически преобразовано в строку).