首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >JavaScript:创建函数,该函数返回一个函数,该函数返回具有getter / setter功能的输出

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

Stack Overflow用户
提问于 2019-06-03 00:47:00
回答 1查看 35关注 0票数 0

我正在尝试创建一个具有setter和getter功能的函数。

下面是我的测试规范。

代码语言:javascript
复制
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部分。

代码语言:javascript
复制
const accessor = obj => {
  return (prop, value) => {
    if (value === undefined) {
      return obj[prop];
    } else {

      // QUESTION: what is going on here?  
      return obj[prop] = value;
    }
  };
};

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-03 00:59:15

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

你可以认为这是以这种方式编写的;

代码语言:javascript
复制
if (value === undefined) {
  return obj[prop];
} else {
  obj[prop] = value;
  return obj[prop];
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56417006

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档