2 回答

TA貢獻1111條經驗 獲得超0個贊
您在構造函數(shù)中立即調用noClicked()和 yesClicked()。我想你會想在點擊No和Yes時給他們打電話。您需要將這些功能添加到按鈕的事件偵聽器中。試試下面的片段。
function createDialog(title, noClicked = function(){}, yesClicked = function(){}) {
this.dialog = document.getElementsByClassName("dialog")[0];
this.dialogTitle = this.dialog.getElementsByTagName("h1")[0];
this.No = this.dialog.getElementsByTagName("button")[0];
this.Yes = this.dialog.getElementsByTagName("button")[1];
var dialog = document.getElementsByClassName("dialog")[0];
this.dialogTitle.innerHTML = title;
document.getElementsByClassName("dialogCon")[0].style.display = "flex";
this.No.addEventListener('click',noClicked);
this.Yes.addEventListener('click',yesClicked);
}
var d = new createDialog("Sample dialog. Exit?", function() {
console.log(d.No);
}, function() {
console.log(d.Yes);
});
<div class="dialogCon">
<div class="dialog">
<h1></h1>
<button type="button">No</button>
<button type="button">Yes</button>
</div>
</div>

TA貢獻1829條經驗 獲得超7個贊
因為你現(xiàn)在有了構造函數(shù),回調會立即被調用,只有在它們被調用之后構造函數(shù)才會返回。對此有兩點評論:
由于調用回調時構造函數(shù)尚未返回,因此變量
d
尚未收到值。所以d
在回調中將是undefined
。這是不現(xiàn)實的,因為在實踐中您只想調用其中一個回調,并且僅在用戶單擊按鈕時調用。那個時候
d
會被定義。
您仍然可以通過傳遞對構造對象的顯式引用來解決它。例如,您可以將其作為this
對象傳遞:
改變:
noClicked();
...到:
noClicked.call(this);
然后在您的回調中,更改:
console.log(d.No);
...到:
console.log(this.No);
添加回答
舉報