黑科技
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__
四個(gè)方法并非標(biāo)準(zhǔn)族阅,只不過(guò)大部分瀏覽器都實(shí)現(xiàn)了。
推薦方法
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'});
總結(jié)
使用__defineGetter__
方便理解,也相對(duì)簡(jiǎn)潔之碗,但不推薦使用;
來(lái)源: yargs npm包