我通过添加很多功能(例如Page
和firstLevelFunction1
)来扩展对象(对不起,来自其他语言的错误名称,我是JS新手)。我的目标是对这些功能进行分组,以便可以通过firstLevelFunction2
这样的点来访问它们。我以与firstLevelGroup.secondLevelFunction1
相同的方式创建了firstLevelGroup
。函数firstLevelFunction
只是为了验证不同级别的行为,当我称其输出为:
第一级功能1
一级功能2
{get:[Function:get]}
{get:[Function:get]}
我希望:
第一级功能1
一级功能2
二级功能1
二级功能2
我的代码:
testLevels
我也尝试了其他版本,但没有成功。上面的一个至少不会返回错误。
请告诉我如何对功能进行分组。另外,请随意说,对功能进行分组完全没有意义:)
顺便说一句,这种结构(第一层)或多或少来自webdriver.io框架。我的功能是将功能分组到第二级,以使文件更加清晰和结构化。
答案 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';
}
}
}
},