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?
  • Вопрос задан
  • 76 просмотров
Решения вопроса 1
delphinpro
@delphinpro Куратор тега JavaScript
frontend developer
Сеттер по сути есть функция (метод). Внутри вы обращаетесь к this. При этом сеттер вызывается в контексте myObject, вот и создается свойство у myObjcet, т.к. this указывает на него.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы
22 нояб. 2024, в 12:53
25000 руб./за проект
22 нояб. 2024, в 12:20
10000 руб./за проект
22 нояб. 2024, в 11:53
3000 руб./за проект