你不会是创建了一个局部的数组吧? 你把 var userInfo = new Array(); 这句的var改为, userInfo = null; userInof = new Array();当然也可能是逻辑问题, 比如你在不应该 new Array的地方多做了一次.不看你的代码,都是在瞎猜.
var userInfo = new Array();//这里是定义一个数组,当然更建议采用json方式定义 var userInfos = [];更小巧function UserInfo(userID,userType) //这里是采用构造函数方式定义一个类, { //当然还有其它方式http://book.csdn.net/bookfiles/110/index.html this.userID = userID; this.userType = userType; } /* 如果想将UserInfo的对象实例存放到数组userinfos中,应该这样 */ var u1 = new UserInfo(100,"manager"); userInfos.push(u1); var u2 = new UserInfo(110,"expert"); userInfos.push(u2);/* userInfos = [u1,u2];也可以 */
UserInfo中用this整出UserInfo的两个属性
和var userInfo = new Array(); 没关系呀,你给这两个放一起有什么用呢?
var userInfo = new Array();function UserInfo(userID,userType){
this.userID = userID;
this.userType = userType;
}
使用中你要注意变量的作用域.
因此不要加this.,
加了的话,就变成对局部变量的访问了,
也就是说你访问的就不是全局的那个userInfo了.
我用A页面调用JS类里面的一个对象,然后又用B页面调用JS类里的方法,这样2个对象肯定不是同一个对象了。 怎么解决呢?
你不会是创建了一个局部的数组吧?
你把 var userInfo = new Array();
这句的var改为,
userInfo = null;
userInof = new Array();当然也可能是逻辑问题,
比如你在不应该 new Array的地方多做了一次.不看你的代码,都是在瞎猜.
{ //当然还有其它方式http://book.csdn.net/bookfiles/110/index.html
this.userID = userID;
this.userType = userType;
} /* 如果想将UserInfo的对象实例存放到数组userinfos中,应该这样 */
var u1 = new UserInfo(100,"manager");
userInfos.push(u1);
var u2 = new UserInfo(110,"expert");
userInfos.push(u2);/* userInfos = [u1,u2];也可以 */
}
OOH.才看到这个.
你访问的根本就不是一个空间的对象.
A页面和B页面是什么关系?
可以在B页面中通过 window.opener.userInfo 来访问 A画面中的 userInfo对象,
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Untitled Document</title>
</head>
<script src="userInfo.js"></script>
<script language="JavaScript">
userInfo.push(new UserInfo("rose", "nurse"));
function showInfo(){
var msg="";
for(var i=0;i<userInfo.length;i++){
if(msg!=""){
msg += "\n";
}
msg += "userId=" + userInfo[i].userID + "; userType=" + userInfo[i].userType +";"
}
alert(msg);
}
</script>
<body>
<input type="button" value="open" onclick="window.open('B.html');">
<input type="button" value="tell" onclick="showInfo();">
</body>
</html>b.html
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Untitled Document</title>
</head>
<script src="userInfo.js">
</script>
<script language="JavaScript">
function doRet(){
var msg = "";
var arr = window.opener.userInfo;
window.opener.pushInfo(document.getElementById("uId").value, document.getElementById("uType").value);
msg = "";
for (var i = 0; i < arr.length; i++) {
if (msg != "") {
msg += "\n";
}
msg += "userType=" + arr[i].userID + "; userType=" + arr[i].userType + ";"
}
close();
}
</script>
<body>
USer ID:<input type="text" id="uId" value="john">
<br>
User Type:<input type="text" id="uType" value="docutor">
<br>
<hr><input type="button" value="ok" onclick="doRet();">
</body>
</html>userinof.js
var userInfo = new Array();function UserInfo(userID, userType){
this.userID = userID;
this.userType = userType;
}function pushInfo(userId, userType){
userInfo.push(new UserInfo(userId, userType));
}
除了前面说的问题以外,
还有一个问题,
你不能把在子窗口中创建的对象push对父窗口的数组中.
因为,子窗口关闭后,它生成的对象也被销毁了.
因此我做了一了pushInfo的方法.
通过调用父窗口的这个方法,
保障对象在父窗口中被创建.