Посмотрите на этот код:
var person = {
firstname: 'abc',
lastname: 'k'
};
Object.defineProperty(person,'fullName',{
get: function() {
return `${this['firstname']}-${this['lastname']}`;
}
});
var person1 = Object.create( person );
console.log(person1.firstname, "firstnmae");
person1.firstname ="sah";
console.log(person1.lastname, "lastname");
console.log(person1.fullName, "fullname");
нет необходимости определять firstname
и lastname
с помощью .defineProperty
, потому что эти setter и getter будет работать по умолчанию так, как вы их написали.
вам следует использовать этот синтаксис, поскольку впоследствии его легче читать / поддерживать, в противном случае, если вы хотите придерживаться этого конструктор синтаксис, здесь вы идете:
var person = function() {};
Object.defineProperty(person,'firstname',{
value: 'abc',
writable: true
});
Object.defineProperty(person,'lastname',{
value: 'k',
writable: true
});
Object.defineProperty(person,'fullName',{
get: function() {
return `${this['firstname']}-${this['lastname']}`;
}
});
var person1 = Object.create( person );
console.log(person1.firstname, "firstnmae");
person1.firstname ="sah";
console.log(person1.lastname, "lastname");
console.log(person1.fullName, "fullname");
Я думаю, вам нужно больше узнать о Object.create()
, и MDN - лучшее место .
функции стрелок имейте лексический this
, будьте осторожны!
этот синтаксис может прояснить некоторые моменты о Object.create()
для вас:
var person = function() {};
person.prototype.firstname = 'abc';
person.prototype.lastname = 'k';
Object.defineProperty(person.prototype,'fullName',{
get: function() {
return `${this['firstname']}-${this['lastname']}`;
}
});
var person1 = Object.create( person.prototype );
console.log(person1.firstname, "firstnmae");
person1.firstname ="sah";
console.log(person1.lastname, "lastname");
console.log(person1.fullName, "fullname");