我是Java语言的新手。我有一个JavaScript类,可以在内部调用递归。 但是运行时出现错误:
$(...)。display不是$(item).display(false);的功能
这是我的代码:
function ScopeData(table, parentRow) {
const tableData = table;
const scopeEl = parentRow;
var childScope = [];
var childRows = [];
this.display = function aa(isDisplay) {
childRows.each(function (index, el) {
if (isDisplay) {
$(el).removeClass("hidden");
}
else {
$(el).addClass("hidden");
}
});
if (!isDisplay) {
var display1 = this.display;
for (let i = 0; i < childScope.length; i++) {
const item = $(childScope)[i];
$(item).display(false);
}
}
}
this.findChildRow = function () {
var scope = $(scopeEl).data("scope")
childRows = $(tableData).find("tr[data-parent='" + scope + "']");
}
this.createChildScope = function () {
$(childRows).each(function (index, el) {
var scope = $(el).data("scope")
if (scope !== "" && scope !== undefined) {
var childRows = $(tableData).find("tr[data-parent='" + scope + "']");
var dataRow = new ScopeData(table, $(el));
dataRow.init();
childScope.push(dataRow);
}
});
}
this.init = function () {
var display = this.display;
this.findChildRow();
this.createChildScope();
$(scopeEl).find("i").on("click", function () {
display(false);
})
}
}
请帮助我解决此问题。 预先感谢
答案 0 :(得分:0)
欢迎使用JavaScript,以及如何评估this
关键字。我强烈建议您在继续之前先阅读this,因为它是javascript核心概念之一。解决问题的一种方法是:
将this
分配到变量中,并使用它。
function ScopeData(table, parentRow) {
var self = this;
...
this.init = function () {
var display = self.display;
一种更干净的方法是绑定任何现代浏览器支持的功能。
this.display = function aa(isDisplay) {
childRows.each(function (index, el) {
if (isDisplay) {
$(el).removeClass("hidden");
}
else {
$(el).addClass("hidden");
}
});
if (!isDisplay) {
var display1 = this.display;
for (let i = 0; i < childScope.length; i++) {
const item = $(childScope)[i];
$(item).display(false);
}
}
}
this.display = this.display.bind(this);