0
我有具有以下功能JS傳遞一個函數,它是一個全局對象實例的一部分完全忽略該實例本身
function BSTAVL() {
/*
Other functions not related to the question
*/
this.inorder = function(cur = this.root) {
var numbers = [];
if (cur != null) {
numbers = this.inorder(cur.left);
numbers.push(cur.value);
numbers = numbers.concat(this.inorder(cur.right));
}
return numbers;
}
this.preorder = function(cur = this.root) {
var numbers = [];
if (cur != null) {
numbers = [cur.value];
numbers = numbers.concat(this.preorder(cur.left));
numbers = numbers.concat(this.preorder(cur.right));
}
return numbers;
}
this.postorder = function(cur = this.root) {
var numbers = [];
if (cur != null) {
numbers = numbers.concat(this.postorder(cur.left));
numbers = numbers.concat(this.postorder(cur.right));
numbers = [cur.value];
}
return numbers;
}
}
var bst = new BSTAVL();
this.root
二進制搜索樹中的對象是表示根目錄的節點對象的樹。
,並在HTML文件中,我有以下按鈕
<button type="button" onclick="Print(bst.inorder);">Inorder</button>
<button type="button" onclick="Print(bst.preorder);">Preorder</button>
<button type="button" onclick="Print(bst.postorder);">Postorder</button>
<br>
<span id="msg"></span>
此功能工作正常。
function PrintInorder() {
var numbers = bst.inorder();
msg.innerHTML = numbers.join(', ')
}
現在,這是出現問題,這Print
函數返回一個空數組,當我追查this.root
裏面的函數爲空,而在實例bst
事實並非如此。
function Print(traversal) {
var numbers = traversal();
msg.innerHTML = numbers.join(', ');
}
我想是隻有一個Print
函數,它的功能,執行它,然後將結果打印號碼的頁面,而不是寫三個獨立的相同功能PrintInorder
,PrintPreorder
和PrintPostorder
我不明白爲什麼會發生這種情況。我正在通過bst.inorder
,所以傳遞的函數必須具有實例bst
的根(this.root
),但實際上它只是空值。