gpt4 book ai didi

javascript - Object.create 不创建属性

转载 作者:行者123 更新时间:2023-11-30 11:08:33 25 4
gpt4 key购买 nike

我有以下功能

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

最佳答案

Object.create() 的“properties”可选参数不应该只是一个普通对象。相反,它应该看起来像 Object.defineProperties() 的参数:

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

如果您希望该属性可枚举和可写等,您必须明确提及:

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

正如在下面的评论中指出的那样,让该函数返回一个使用被调用的上下文创建的新对象作为原型(prototype)确实看起来很奇怪。我不确定你为什么不这样做

   return new Admin(filtered, this.affiliation);

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

关于javascript - Object.create 不创建属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54693272/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com