function changeObjProperty(o) { o.siteUrl = "http://www.baidu.com" o = new () o.siteUrl = "http://www.google.com" } let webSite = new (); changeObjProperty(webSite); console.log(webSite.siteUrl);打印结果是 http://www.baidu.com
website明明是把参数地址传进了changeObjProperty,为什么函数里面对website的值修改,没有生效呢?
问题出在 o = new (),这个方法的作用就是将o的地址指向了新的地址,那么对o的操作将与website无关。
为了证实我们的猜想,把代码稍作修改。
function changeObjProperty(o) { o.siteUrl = "http://www.baidu.com" o.name="百度" o = new () o.siteUrl = "http://www.google.com" o.name="谷歌" } let webSite = new (); webSite.siteUrl="http://www.jd.com" webSite.name="京东" changeObjProperty(webSite); console.log(webSite.siteUrl); console.log(webSite.name);
我们可以看到,在o重新赋值之前,对参数的修改是生效的,这也就证明,这个第一次未生效并非是指传递造成的。而在o被重新初始化之后,地址已经指向新的对象,修改并不会返回。
所以注意一点,js中new 会重新生成对象,而不会覆盖,对新对象的操作将与原对象无关。
继续阅读与本文标签相同的文章
-
CMU 15-721 14-数据库调度 Scheduling
2026-05-18栏目: 教程
-
从校招生到核心架构师,支付宝研究员李俊奎谈如何成为一名优秀的程序员
2026-05-18栏目: 教程
-
【阿里云十年,因为有我而不同】有一种糖叫语法糖【5】IOT三连之设备之扩展操作
2026-05-18栏目: 教程
-
阿里云服务器搭建一个网站网站建设的基本步骤——部署与发布新手入门
2026-05-18栏目: 教程
-
网络基础技术实践#网络安全基础技术实践课程
2026-05-18栏目: 教程
