JavaScript:创建一个函数,该函数返回具有getter/setter功能的输出

JavaScript:创建一个函数,该函数返回具有getter/setter功能的输出,javascript,function,object,return,setter,Javascript,Function,Object,Return,Setter,我试图创建一个具有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,

我试图创建一个具有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;
    }
  };
};

请看我的问题在我的代码上面的评论

如果没有作为参数传递的
值,那么您的代码就像一个getter。否则,它将充当setter buy,在设置属性值后立即返回属性值

你可以这样想,或者用这种方式写

if (value === undefined) {
  return obj[prop];
} else {
  obj[prop] = value;
  return obj[prop];
}

啊,这更有道理!谢谢你的替代代码