此时改变b的值,a的值是不会收到影响的。
而当我们进行复杂类型赋值时,例如:
此时我们b中的name值改变了,与此同时a中的name值也将变成b,大多数情况下我们都不希望这种情况发生,那么该怎么处理?
(ps:简单数据类型一般包括number,string,boolean,其他数据类型一般都为复杂数据类型)
处理这个问题涉及到JS中的深拷贝,JS的深拷贝会为新的变量重新申请一个新的地址块,不会指向原变量的地址,如何实现深拷贝,以下提供了两种方法。
将a进行序列化之后赋值给b,这种方法虽然简单,但是有一定的缺陷,如果a对象中有函数,数组等复杂数据类型,在序列化之后将会丢失这些复杂数据类型,导致赋值不完全。
main.htm假设已存在一个txtMain的文本框执行调用ShowTeatHtml():
function ShowTeatHtml(){
var rtnValue= window.showModalDialog("test.htm", window,
"unadorned:yeshelp:noscroll:yesstatus:yes"
+ "dialogWidth:800" //宽
+ "pxdialogHeight:600" //高
+ "pxcenter:yes")
document.getElementById("txtMain").innerText=rtnValue
}
假设test.htm有一个ID为btnReturn的按钮\一个ID为txtReturn的文本框
设置btnReturn的onclick="CloseAndReturn()"
function CloseAndReturn(){
var rtnTxt=document.getElementById("txtReturn").innerText
window.returnValue=rtnTxt
window.close()
}
工作闲暇,完全手敲的代码。
有一个办法很方便a.js文件改成其他服务器端脚本,但输出是js语法格式
比如把a.js改成a.php文件
代码示例如下:
<?php $id = $_GET['id'] echo ' function tan(){ alert("' . $id . '") } '这个文件会获取提供的id的值,然后生成一个js函数方法
调用的时候:
<script type="text/javascript" src="a.php?id=20"></script><button onclick="tan()">Click</button>
上面是js引入这个php文件,并提供一个参数id,值是20
然后加了一个按钮触发点击事件调用a.php生成的js函数方法,结果是会弹出20的提示警告框
效果如下图:
满意请采纳。