我似乎在使用addEventListener
即时匿名函数内部时遇到了范围问题。
在事件侦听器内部,我正在创建一个在立即函数之外构造的 Javascript“类”实例(使用构造函数 and prototype
)。
为了保持良好的实践,我想使用即时函数来避免全局变量,并addEventListener
避免使用内联 Javascript(从而将其与 html 分开)。
那么我怎样才能在没有范围问题的情况下正确地做到这一点,这样做的好做法是什么?
这是我的html:
<html>
<head>
<title>asdf</title>
</head>
<body>
<input type = "text" id = "userInput" />
<input type = "button" id = "submitButton" value = "submit" />
<script type = "text/javascript" src = "asdf.js" />
</body>
</html>
...这是我的 Javascript asdf.js
(不起作用):
// constructor for object-oriented processing of the user input
function Statement(expression)
{
this.expression = expression;
}
// instance method
Statement.prototype.checkSyntax = function()
{
var newExp = this.expression;
return newExp;
};
// immediate anonymous function
(function()
{
var submitButton = document.getElementById("submitButton");
// event listener for the submit button
submitButton.addEventListener("onclick", function(event)
{
var userInput = document.getElementById("userInput");
// creating a new object with constructor above
var expr = new Statement(userInput);
// calling instance method of the "class" Statement
alert(expr.checkSyntax() );
// disable the button after first use
event.stopImmediatePropagation();
}, false);
})(); // end of immediate anonymous function