Muranx
@Muranx
кто понял this тот в цирке не смеётся

Как реализуется затенение свойств в случае с set: function(val){...}?

Здравствуйте!

В книге Келли Симпсона - " You dont know JS : this and Objects PROTOTYPES " в совсем короткой статье про затенение свойств имеющихся в прототипах наткнулся на фразу : " если свойство foo находится выше по цепочке [[ Prototype ]] и является сеттером , то всегда будет вызываться сеттер . Свойство не будет добавлено в myObject , сеттер foo не будет переопределён!

var a = {z:20};

Object.defineProperty(a, "foo", {
  get: function(){
    return this.z
  },
  set: function(v){
    this.z=v
  }
});

a.foo=100;
var myObject = Object.create(a);
myObject.foo = 999;

console.log(a.foo); // 100
console.log(myObject.foo); // 999
console.log(myObject.hasOwnProperty("foo")); // false
console.log(a.foo); // 100

Вопрос! Если foo нет в теле myObject, при этом свойство a после всех манипуляций присутствует по прежнему со значением 100 в теле объекта a, то тогда куда записалось данное свойство foo?
  • Вопрос задан
  • 75 просмотров
Решения вопроса 1
delphinpro
@delphinpro Куратор тега JavaScript
frontend developer
Сеттер по сути есть функция (метод). Внутри вы обращаетесь к this. При этом сеттер вызывается в контексте myObject, вот и создается свойство у myObjcet, т.к. this указывает на него.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
26 апр. 2024, в 10:01
500 руб./за проект
26 апр. 2024, в 09:18
500 руб./в час
26 апр. 2024, в 06:46
1500 руб./в час