美文网首页
Javascript中的属性代理

Javascript中的属性代理

作者: 无米学炊 | 来源:发表于2018-11-29 11:58 被阅读18次

黑科技

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包

相关文章

网友评论

      本文标题:Javascript中的属性代理

      本文链接:https://www.haomeiwen.com/subject/mlwxcqtx.html