簡體   English   中英

JavaScript:創建函數,該函數返回一個返回具有getter / setter功能的輸出的函數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM