2 回答
TA贡献1111条经验 获得超0个赞
您在构造函数中立即调用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个赞
因为你现在有了构造函数,回调会立即被调用,只有在它们被调用之后构造函数才会返回。对此有两点评论:
由于调用回调时构造函数尚未返回,因此变量
d
尚未收到值。所以d
在回调中将是undefined
。这是不现实的,因为在实践中您只想调用其中一个回调,并且仅在用户单击按钮时调用。那个时候
d
会被定义。
您仍然可以通过传递对构造对象的显式引用来解决它。例如,您可以将其作为this
对象传递:
改变:
noClicked();
...到:
noClicked.call(this);
然后在您的回调中,更改:
console.log(d.No);
...到:
console.log(this.No);
添加回答
举报