我浏览过网站,似乎遇到了一些解决方案,但似乎都没有。所以这就是问题所在。
我有以下Javascript:
THEOBJECT = {
init: function() {
this.tools.init();
}
};
THEOBJECT.tools = {
active: false,
init: function() {
// active variable updated elsewhere/loading
if (!this.active) {
THEOBJECT.utils.timeout('tools.init', 100);
}
// is active so continue
}
};
THEOBJECT.utils = {
timeout: function(functionName, time) {
setTimeout(function() {
THEOBJECT[functionName]();
}, time);
}
};
THEOBJECT.init();

运行THEOBJECT.utils.timeout
说:
THEOBJECT [functionName]不是函数
我试图运行THEOBJECT.tools.init()
我假设这是因为它不是THEOBJECT对象的直接函数是否有解决方法或者是split()最好的方法?
答案 0 :(得分:1)
还可以使用lodash.js
来执行此操作。请参阅更新的代码段。
或者使用下面提到的传统approch
您正试图以错误的方式访问某个属性
你正在做THEOBJECT[tools.init]
这是不正确的。它应该像THEOBEJECT[tools][init]
THEOBJECT = {
init: function() {
this.tools.init();
}
};
THEOBJECT.tools = {
active: false,
init: function() {
// active variable updated elsewhere/loading
if (!this.active) {
THEOBJECT.utils.timeout('tools.init', 100);
}
console.log("active")
// is active so continue
}
};
THEOBJECT.utils = {
timeout: function(functionName, time) {
setTimeout(function() {
_.get(THEOBJECT,functionName);
}, time);
}
};
THEOBJECT.init();

<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.js"></script>
&#13;
答案 1 :(得分:0)
你也可以使用简单的缩小功能,并使其成为单行:
9
***456***
在您的代码中:
functionName.split('.').reduce((acc,curr) => return acc[curr], THEOBJECT)();
&#13;