我正在真正學習使用JavaScript對象的細微差別,並陷入困境。測試JavaScript對象的意外結果
我有一組「名稱空間」對象來分割DOM和模型以進行操作。下面是代碼:
function Sandbox2(){
this.page = {
FirstName: document.getElementById("FirstName")
, LastName: document.getElementById("LastName")
, Email: document.getElementById("Email")
};
this.model = {
FirstName: "James"
, LastName: "Eggers"
, Email: "[email protected]"
};
this.behavior = {};
this.bindPageToModel = function(){
for(var property in this.page){
if (property){
property.value = this.model[property];
}
}
};
this.bindModelToPage = function(){
for(var property in this.model){
if (property){
this.model[property].value = this.page[property];
}
}
};
};
使用JsTestDriver,我做了一些測試,以玩弄和嘗試的頁面和模型對象的一些事情。具體測試如下:
"test ModelBinding should be allowed." : function(){
var sandbox2 = new Sandbox2();
var page = sandbox2.page;
page.FirstName = "Test";
page.LastName = "Account";
sandbox2.bindModelToProperty();
assertEquals("Ensure the new values took.", page.FirstName, sandbox2.page.FirstName);
assertEquals("New Page values should be in the model.", "Test", sandbox2.model.FirstName);
}
在上面的測試中,第一個assertEquals
通過;然而,第二個測試將sandbox2.model.FirstName
解析爲「James」(初始值)。
任何人都有關於如何更改代碼(原始或測試)的任何建議,以允許我將page
對象的值映射到model
對象?
我會告訴你,在實踐中,'姓:的document.getElementById(「名字」)'是不是一個好主意。你不想在一個對象中存儲對DOM節點的引用 - 這可以爲一個對象創建一個循環引用,對另一個來說,如果DOM樹被重建(比如說因爲頁面內容被修改爲一個字符串[不是很好的做法]) ,您的參考將不再有效。你最好在使用它之前抓住一個DOM節點,而不是在對象的屬性中保留對它的引用。 – 2011-06-09 17:57:55
@Chris我完全同意。這段代碼實際上更像是一個我在玩的沙盒,同時也學習了JsTestDriver。在實踐中,我會讓頁面對象每次都重新獲取特定的節點。 – JamesEggers 2011-06-09 18:10:03