Object.create не создает свойства - PullRequest
0 голосов
/ 14 февраля 2019

У меня есть следующая функция

const Admins = function(users, affiliation) {
    this.users = users;
    this.affiliation = affiliation;
}
Admins.prototype.filterAffiliation = function _filterAffiliation() {
    const filtered = this.users.filter( (user) => {
        return user.affiliation === this.affiliation;
    });
    console.log(filtered); // this shows the array of users filtered
    return Object.create(this, { users: filtered });
}

const admins = new Admins(users, affiliation);
console.log(admins);  // this shows everything correctly... 
admins.filterAffiliation() // this shows { users: undefined }

Если я изменяю Object.create(this, {users: filtered}) на this.users = filtered; return this;, это «работает», но я не хочу менять состояние моего исходного объекта.Есть мысли?

1 Ответ

0 голосов
/ 14 февраля 2019

Необязательный аргумент "properties" для Object.create() не должен быть просто обычным объектом.Вместо этого он должен выглядеть как аргумент Object.defineProperties():

   return Object.create(this, {
     users: { value: filtered }
   });

И если вы хотите, чтобы свойство было перечисляемым и доступным для записи и т. Д., Вы должны явно указать, что:

   return Object.create(this, {
     users: { 
       value: filtered,
       enumerable: true,
       writable: true
     }
   });

Как указано в комментарии ниже, эта функция возвращает новый объект, созданный с вызванным контекстом, поскольку прототип выглядит странно.Я не уверен, почему вы не просто

   return new Admin(filtered, this.affiliation);

или что-то еще менее экзотическое.

...