![](/img/trans.png)
[英]Javascript setter and getter over prototype initialization function
[英]JavaScript: Create Function that returns a function that returns output with getter / setter capabilities
我正在嘗試創建一個具有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');
});
});
下面的代碼通過了我的測試規范,但是我對為什么感到困惑,尤其是在代碼的設置部分。
const accessor = obj => {
return (prop, value) => {
if (value === undefined) {
return obj[prop];
} else {
// QUESTION: what is going on here?
return obj[prop] = value;
}
};
};
請在上面的代碼中查看我的問題。
如果沒有將value
作為參數傳遞,那么您的代碼就像一個吸氣劑。 否則,它充當設置器購買者,在設置后立即返回屬性值。
您可以想到這種替代方式;
if (value === undefined) {
return obj[prop];
} else {
obj[prop] = value;
return obj[prop];
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.