Object.create没有创建属性

问题描述 投票:1回答:1

我有以下功能

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;它“工作”,但我不想改变我的原始对象的状态。有什么想法吗?

javascript functional-programming prototype
1个回答
3
投票

Object.create()的“properties”可选参数不应该只是一个普通的对象。相反,它应该看起来像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);

或其他不那么奇特的东西。

© www.soinside.com 2019 - 2024. All rights reserved.