首页 > 解决方案 > 在 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没有指向objin a.js,所以错误就出来了。

那么,如何扩展obj使用?a.jsextend.js

标签: javascripttypescriptoop

解决方案


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);


推荐阅读