繁体   English   中英

Object.create没有创建属性

[英]Object.create not creating properties

我有以下功能

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 }

如果我用this.users = filtered; return this;更改Object.create(this, {users: filtered}) this.users = filtered; return this; this.users = filtered; return this; 它“有效”,但我不想改变原始对象的状态。 有什么想法吗?

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);

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM