javascript - 使用扩展运算符将参数分配给 ES5 构造函数中的新对象?
问题描述
构造函数接受具有多个属性的选项对象。如何在不指定每个对象的情况下将它们分配给新创建的对象?
这是我失败的尝试
function Client(options) {
const defaultOptions = {
host: '127.0.0.1',
port: 1905,
loggerFn: console.log,
maxTime: 60000,
startFromTransactionId: 1
};
this = { ...defaultOptions, ...userOptions, ...this }
}
ReferenceError:分配中的左侧无效
我认为这行得通,但我希望有一个使用扩展运算符的更简单的解决方案
function Client(options) {
const defaultOptions = {
host: '127.0.0.1',
port: 1905,
loggerFn: console.log,
maxTime: 60000,
startFromTransactionId: 1
};
for (prop in defaultOptions) {
if (defaultOptions.hasOwnProperty(prop)) {
this[prop] = options[prop] ? options[prop] : defaultOptions[prop];
}
}
}
解决方案
使用Object.assign
应该可以解决问题:
function Client(userOptions) {
const defaultOptions = {
host: '127.0.0.1',
port: 1905,
loggerFn: console.log,
maxTime: 60000,
startFromTransactionId: 1
};
Object.assign(this, { ...defaultOptions, ...userOptions });
}
推荐阅读
- php - Laravel 向集合 JSON 添加单独的键值对
- c# - Sitefinity 用户控制
- python - 烧瓶 werkzeug\formparser.py 异常
- javascript - 箭头函数混淆
- git - 如何查看一个分支的更改是否已经在另一个分支中完成?
- dafny - Dafny 程序不能证明这种二分搜索实现吗?
- django - 实际上,我将 django 数据库 sqlite3 连接到 Mysql 数据库,每当我迁移时,我都会收到此错误
- spring - Spring批处理的默认行为是仅在第一项完成后才处理下一项吗?
- java - eclipse Luna创建EJB 2.1项目时如何为Websphere 8.5编写jndi.properties
- r - r 删除具有空索引的列