javascript - 在 Javascript 中扩展对象
问题描述
我想扩展一个对象Object.assign()
:
extend.js
:
module.exports = {
get csrfOptions() {
return Object.assign({}, defaultOptions, this.securityOptions.csrf); //can't read property csrf of undefined
}
}
a.js
:
const extend = require('./extend.js');
const obj = {
securityOptions: {
csrf: {
name: 'laoqiren'
}
}
}
Object.assign(obj,extend);
出现错误can't read property csrf of undefined
,似乎调用时Object.assign()
ofgetter
函数csrfOptions
运行了,但this
没有指向obj
in a.js
,所以错误就出来了。
那么,如何扩展obj
使用?a.js
extend.js
解决方案
Object.assign
复制属性值。您需要Object.defineProperties(obj, Object.getOwnPropertyDescriptors(extend))
改用“重新定义”属性。
这就是为什么在尝试获取 的值时会出错的原因csrfOptions
。
const defaultOptions = {};
const extend = {
get csrfOptions() {
return Object.assign({}, defaultOptions, this.securityOptions.csrf); //can't read property csrf of undefined
}
}
const obj = {
securityOptions: {
csrf: {
name: 'laoqiren'
}
}
}
Object.defineProperties(obj, Object.getOwnPropertyDescriptors(extend))
console.log(obj.csrfOptions);
推荐阅读
- javascript - 将 HTML 集合输出为列表 JavaScript
- visual-studio - Visual Studio 2017 Winforms Designer 缓存在哪里?
- laravel - Laravel 返回错误后如何显示 Bootstrap 通知/toast (MDBootstrap)
- hibernate - 如何修复“:意外元素(”URI:“http://www.hibernate.org/xsd/orm/cfg”,本地“休眠配置”)
- ios - 在具有最大高度的动态高度的 UITableViewCell 中添加 UITextView
- angular - IONIC 4空项目android apk文件大小大
- python - 一起循环多个生成器
- c++ - 为什么我在这里得到垃圾(不需要的)输出?
- php - 从 Json API 端点获取数据并将数据保存在数组中。基本上从从 API 回调接收到的 Json 数据创建变量
- angular - 如何修复 net::ERR_ABORTED 404(未找到)