Iは、以下の機能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
関数Iインスタンスbst
ではないが関数内this.root
は、ヌルであったことをトレースし、空の配列を返しています。
function Print(traversal) {
var numbers = traversal();
msg.innerHTML = numbers.join(', ');
}
私が欲しいの代わりに、3つの別々の同一機能PrintInorder
、PrintPreorder
とPrintPostorder
Iを書くのページへの結果の数字を、関数を受け取り、それを実行し、印刷しますちょうど1 Print
の機能を持つことですそれがなぜ起こるのか理解していない。私はbst.inorder
を渡しているので、渡された関数はインスタンスbst
のルート(this.root
)を持たなければならず、代わりにnullにすぎません。