我正在尝试创建一个具有setter和getter功能的函数。
下面是我的测试规范。
it('the returned function can get properties of the given object', () => {
let accessObject = accessor({ a: 100 });
expect(accessObject('a')).toEqual(100);
accessObject = accessor({ foobar: [7, 8, 9] });
expect(accessObject('foobar')).toEqual([7, 8, 9]);
expect(accessObject('a')).toEqual(undefined);
});
it('the returned function can set properties of the given object', () => {
const obj = { stuff: 'something' };
const accessObject = accessor(obj);
accessObject('stuff', 'a new value');
expect(obj.stuff).toEqual('a new value');
expect(obj['pizz-pie']).toEqual(undefined);
// key value
accessObject('pizza-pie', 'yummmm');
expect(obj['pizza-pie']).toEqual('yummmm');
});
});
下面的代码通过了我的测试规范,但我对原因感到困惑,特别是在我的代码的setter部分。
const accessor = obj => {
return (prop, value) => {
if (value === undefined) {
return obj[prop];
} else {
// QUESTION: what is going on here?
return obj[prop] = value;
}
};
};
请看我在上面的代码中评论的问题。
发布于 2019-06-03 00:59:15
如果没有将value
作为参数传递,那么您的代码就像是一个getter。否则,它充当setter buy,在设置后立即返回属性值。
你可以认为这是以这种方式编写的;
if (value === undefined) {
return obj[prop];
} else {
obj[prop] = value;
return obj[prop];
}
https://stackoverflow.com/questions/56417006
复制相似问题