奇怪的开关操作员行为

时间:2016-01-13 12:49:41

标签: typescript visual-studio-code

美好的一天,

我真的很难给帖子正确标题(描述问题),所以请原谅我。

问题:

我的课程有两种方法如下:

1  import FormPopulator = require("../util/FormPopulator");
2 
3  class UIX {
4    
5     formPopulator: FormPopulator;
6 
7     contructor () {
8         this.formPopulator = new FormPopulator();
9     }
10     
11    public setDefaultValues(defaultValues: DefaultValues) {
12        for (var i = 0; i < SearchAllFormProperties.searchFormProperties.length; i++) {
13            this.pushDataToUI(SearchAllFormProperties.searchFormProperties[i], defaultValues);
14        }
15        alert("End Of the loop.");
16    }
17 
18    public pushDataToUI(property: string, defaultValues: DefaultValues) {
19        switch (property) {
20            case "textField": 
21                (<HTMLInputElement> document.getElementById("textField")).value = "";
22                break;
23            case "dropDown":
24                this.formPopulator.populateTheDropBox("dropDown", defaultValues.listOfValues);
25                alert("after populateTheDropBox");  
26                break;
27            default:
28                alert("Property: " + property + " is not accepted.");
29        }
30     }
31  }

现在 - setDefaultValues被调用,但执行没有到达 UIX 类的行15,除非我注释掉行同一个类的24populateTheDropBox调用,但是它到达行25意味着它从populateTheDropBox方法返回,但为什么不返回{{1} }

setDefaultValues

PS 如果我从类 FormPopulator 的第1 class FormPopulator { 2 public populateTheDropBox(selectElementID: string, listOfElements: Array<any>) { 3 4 // Get the combo box 5 var selectElement = <HTMLSelectElement> document.getElementById(comboBoxID); 6 // Reset the options 7 selectElement.options.length = 0; 8 9 for (var i = 0; i < listOfElements.length; i++) { 10 11 var option = document.createElement("option"); 12 option.value = ""+listOfElements[i].id; 13 option.innerHTML = listOfElements[i].value; 14 15 selectElement.appendChild(option); 16 } 17 } 18 } 行开始注释循环 - 它会返回9并执行第{{I}行1}}类 UIX setDefaultValues

我真的很难解释这种行为,并且没有例外。

1 个答案:

答案 0 :(得分:0)

  

除非我注释掉同一个类的第24行,即populateTheDropBox调用,但它到达第25行意味着它从populateTheDropBox方法返回,但为什么不返回setDefaultValues

根据您的代码,您在循环中调用pushDataToUI。只是因为你进入第25行alert("after populateTheDropBox"); 一次并不意味着循环终止。它可能会继续执行(并且可能在崩溃调用堆栈的某些时候出现javascript错误)并且您可能永远不会访问alert("End Of the loop.");

相关问题