测试JavaScript对象时出现意外结果
我正在真正学习使用JavaScript对象的细微差别,但遇到了一个障碍 我有一组“名称空间”对象来分割DOM和模型,以便对其进行操作。代码如下:测试JavaScript对象时出现意外结果,javascript,js-test-driver,Javascript,Js Test Driver,我正在真正学习使用JavaScript对象的细微差别,但遇到了一个障碍 我有一组“名称空间”对象来分割DOM和模型,以便对其进行操作。代码如下: function Sandbox2(){ this.page = { FirstName: document.getElementById("FirstName") , LastName: document.getElementById("LastName") , Email: document.getElementById
function Sandbox2(){
this.page = {
FirstName: document.getElementById("FirstName")
, LastName: document.getElementById("LastName")
, Email: document.getElementById("Email")
};
this.model = {
FirstName: "James"
, LastName: "Eggers"
, Email: "James.R.Eggers@gmail.com"
};
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”(初始值)
有人对我如何更改代码(原始或测试)以允许我将
页面
对象的值映射到模型
对象有什么建议吗?问题似乎在这里:
for(var property in this.page){
if (property){
property.value = this.model[property];
}
}
属性
变量实际上是对象(FirstName、LastName和Email)的键值。您正在这些字符串对象上设置值
属性,但没有任何结果
我想你是想做这样的事情:
this.page[property].value = this.model[property];
我将告诉您,实际上,
FirstName:document.getElementById(“FirstName”)
不是一个好主意。您不希望在对象中存储对DOM节点的引用-这可能会为一个节点创建循环引用,而对于另一个节点,如果重建DOM树(例如,因为页面内容被修改为字符串[非良好做法]),则引用将不再有效。在使用DOM节点之前,最好先抓取一个新的DOM节点,而不是在对象的属性中保留对它的引用。@Chris我完全同意。这段代码实际上更像是一个沙盒,我在学习JsTestDriver的同时也在玩它。实际上,每次我都会让页面对象重新检索特定的节点。谢谢Luca!实际上有两个问题。首先,在我的初始代码示例中,我从一个模型转到另一个页面,而不是从一个页面转到另一个模型(所讨论的代码已经更新)。第二个问题是通过指出property
在本例中是字符串键而不是属性本身来解决的。我必须删除.value
才能让它工作。再次感谢。