如何将对象键添加到原型?

问题描述 投票:0回答:2

如何将所有对象键/值添加到原型中。

例如,如果我有对象

var serverResponse = {
    foo: 'bar'
    id: 123
    name: 'Rick Sanchez'
}

我想将每个键添加到Person的原型中。我可以像这样为每个键手动执行此操作。

function Person(serverResponse) {
    this.foo = serverResponse.foo;
    this.id = serverResponse.id;
    this.name = serverResponse.name;
}

但我确信有更好的方法来做到这一点......

javascript
2个回答
1
投票

听起来你不想添加原型,而是复制所有属性。这可以在现代浏览器中使用Object.assign(可以在古代浏览器中使用polyfill引入)完成:

function Person(serverResponse) {
  Object.assign(this, serverResponse);
}

...当然,您必须相信serverResponse没有您不想要的数据。如果你确实想要分配原型,你也可以在原型上使用Object.assign

Object.assign(Person.prototype, serverResponse);

3
投票

我认为你不想把它添加到Person的原型中,因为这使得它在Person的每个实例上都可用(并且似乎serverResponse包含特定于某个实例的变量,而不是Person的所有实例 - 这是很可能只是你的问题标题的术语问题)。

话虽这么说,我一直这样做 - 我将一个通用的JS对象(比如你的serverResponse)传递给我的一个类的构造函数(比如Person),并将它保存为实例变量。然后我在原型上创建存取方法,如下所示:

function Person(serverResponse) {
    this.serverResponse = serverResponse;
}

Person.prototype.getFoo = function() {
   return this.serverResponse.foo;
};

Person.prototype.getId = function() {
   return this.serverResponse.id;
};

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