我使用switch语句来测试span的名称属性:
<span id = "prompt" title = "newPerson">What is your name?</span>
<button type = "button" id = "execute">Do It!</button>
<input type="text" id="input" />
document.getElementById("execute").addEventListener("click",execute);
function execute(){
var action = document.getElementById("prompt").title;
var request = document.getElementById("input").value;
if(action == "newPerson"){ alert("WTF"); } //Alerts as expected
this.act = function(action, request){
switch(action){ //Default case always gets called
case "newPerson":
person = new Person(request, 0, 0);
account = new Account(person);
break;
default:
alert("Internal Error :(");
break;
}
}
if(request == ""){
alert("No Input");
}else{
this.act();
}
}
我也尝试将其更改为“newPerson&#39;”。我也尝试改变我的使用&#39; ===&#39;而不是&#39; ==&#39;我仍然得到了&#34; WTF&#34;警报。看起来这应该是任何想法?
答案 0 :(得分:1)
这很简单。
在调用this.act
时,您没有传递任何参数 - 因此使用切换运算符的函数体中的action
参数是undefined
- &gt;调用默认情况。
您基本上可以将功能签名更改为以下
...
this.act = function(){
...
然后您将生成一个闭包,并且将从外部范围使用action
和request
值。
或者你可以在调用函数时更改这部分代码并传递如下参数:
...
if (request == ""){
alert("No Input");
} else {
this.act(action, request);
}
...
注意:强> 通常,使用与外部作用域中的变量同名的函数参数是一种糟糕的模式 - 它可能会导致误解,就像你的情况一样。