分组/嵌套获取功能

时间:2019-06-24 12:04:46

标签: javascript webdriver-io

我通过添加很多功能(例如PagefirstLevelFunction1)来扩展对象(对不起,来自其他语言的错误名称,我是JS新手)。我的目标是对这些功能进行分组,以便可以通过firstLevelFunction2这样的点来访问它们。我以与firstLevelGroup.secondLevelFunction1相同的方式创建了firstLevelGroup。函数firstLevelFunction只是为了验证不同级别的行为,当我称其输出为:

  

第一级功能1
  一级功能2
  {get:[Function:get]}
  {get:[Function:get]}

我希望:

  

第一级功能1
  一级功能2
  二级功能1
  二级功能2

我的代码:

testLevels

我也尝试了其他版本,但没有成功。上面的一个至少不会返回错误。

请告诉我如何对功能进行分组。另外,请随意说,对功能进行分组完全没有意义:)
顺便说一句,这种结构(第一层)或多或少来自webdriver.io框架。我的功能是将功能分组到第二级,以使文件更加清晰和结构化。

1 个答案:

答案 0 :(得分:1)

发生这种情况是因为您要返回一个对象初始化器,其中get成为普通的方法名称,它不会为内部对象创建吸气剂。要解决此问题,请将返回的对象包装在Object.create(null, {...})中(或使用更有意义的原型(如果提供)),您将获得期望的结果。

let JsTestingPage = Object.create(null, {
  firstLevelFunction1: {
    get: function() {
      return 'first level function1';
    }
  },
  firstLevelFunction2: {
    get: function() {
      return 'first level function2';
    }
  },
  firstLevelGroup: {
    get: function() {
      return Object.create(null, {
        secondLevelFunction1: {
          get: function() {
            return 'second level function1';
          }
        },
        secondLevelFunction2: {
          get: function() {
            return 'second level function2';
          }
        }
      });
    }
  },
  testLevels: {
    value: function() {
      console.log(this.firstLevelFunction1);
      console.log(this.firstLevelFunction2);
      console.log(this.firstLevelGroup.secondLevelFunction1);
      console.log(this.firstLevelGroup.secondLevelFunction2);
    }
  }
});
JsTestingPage.testLevels();

或者在对象初始化器中创建吸气剂:

firstLevelGroup: {
    get: function() {
        return {
            get secondLevelFunction1 () {
                return 'second level function1';
            },
            get secondLevelFunction2 () {
                return 'second level function2';
            }
        }   
    }
},