如何将所有对象键/值添加到原型中。
例如,如果我有对象
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;
}
但我确信有更好的方法来做到这一点......
听起来你不想添加原型,而是复制所有属性。这可以在现代浏览器中使用Object.assign
(可以在古代浏览器中使用polyfill引入)完成:
function Person(serverResponse) {
Object.assign(this, serverResponse);
}
...当然,您必须相信serverResponse
没有您不想要的数据。如果你确实想要分配原型,你也可以在原型上使用Object.assign
:
Object.assign(Person.prototype, serverResponse);
我认为你不想把它添加到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;
};
...