黑科技
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包
网友评论