Javascript中的属性代理

黑科技

const target = {};
const source = {test: 'a', get foo() { return source.test;}};

target.__defineGetter__('foo', source.__lookupGetter__('foo'));
console.log(target.foo); // 输出a

备注: __defineGetter____defineSetter____lookupGetter____lookupSetter__四个方法并非标准,只不过大部分浏览器都实现了。

推荐方法

const target = {};
const source = {test: 'a', get foo() { return source.test;}};

Object.defineProperty(target, 'foo',  Object.getOwnPropertyDescriptor(source, "foo"));
console.log(target.foo); // 输出a

defineProperty还支持 value方式:

Object.defineProperty(target, 'bar', {value: '111'});

总结

使用__defineGetter__ 方便理解,也相对简洁,但不推荐使用;
来源: yargs npm包

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容