通过引用复制对象是否有实际用途
Is there a practical use for copying an object by reference?
Javascript通过引用复制对象,而不是从字面上复制对象。例如:
var myObject = {};
var myCopy = myObject;
myObject.foo = "bar";
alert(myCopy.foo); //alerts "bar"
但是我真的很难想到这样做的实际原因,除了给开发人员一种使代码稍微更具可读性的方法(因为您可以为同一对象提供不同的名称)。
最有可能的事情是我没有抓住要点,所以谁能告诉我那个要点是什么?
写完后:
var myObject = {};
在内存的某个地方有一个对象,您可以通过名称myObject
引用它。下面的赋值:
var myCopy = myObject;
…说myCopy
现在指的是同一个物体,无论它在哪里。这与给函数提供参数时发生的事情是一样的:
function somefunc(localName) {
// body
}
someFunc(myCopy);
现在有一个名为localName
的变量,它是local to someFunc,它也指向内存中的同一个对象。
这是我们传递对象引用的基本方式,这样它就可以在不同的作用域中以不同的名称被引用。
我们可以将整个结构复制到内存中的新位置。没有什么能阻止设计师创造出这样一种语言。但它的效率较低——想想深度嵌套的对象——通常不是您想要做的。例如,如果一个函数修改了对象的一个属性,那么它需要返回整个对象,以使该更改在函数外部持久存在。调用者需要处理返回值,决定是否需要保留旧对象,或者新创建的稍微不同的副本是否可以覆盖它。
再次强调,这个设计方向在原则上没有错;
看情况;在您的情况下,它可能相当令人困惑,因为它没有真正的目的。但是,对于到对象的较长路径,将对象存储在单独的变量中可能是有利的,因为它需要为使用该对象的每个语句输入较少的类型,例如以下示例:
var style = document.getElementById("foo").style;
style.color = "red";
style.font = "sans-serif";
// ...
我的观点(仅此而已)是,通过引用(而不是复制)创建对象通常更有用,也是用户想要的。如果您将一个对象作为参数传递给一个方法,那么您(几乎总是)对该方法正在处理和修改的对象感兴趣,而不是处理一个副本(而不修改原始对象)。显然,在某些情况下,这是不正确的,这将是很好的选择,但我不记得曾经发现自己希望我可以只是传递一个对象副本给一个方法,我通常非常感激,我正在工作的东西是东西。
- 当包含另一个asp文件时,是否也包含所有引用的样式和脚本页面
- 是否可以将外部javascript引用从SWF注入到主机页中
- 是否可以创建一个对象,该对象是另一个对象的子集,而不会丢失javascript中的引用
- 我是否必须在每个文件中引用 TypeScript 定义
- 是否可以引用猫鼬(MongoDB)上的子文档
- 是否可以引用JS数组/对象中的另一个元素
- Javascript-确定对象中是否有任何作用域引用
- Google Drive是否不再允许从其他网站引用JavaScript文件
- 是否可以获得对“”的setter函数的引用;setter”;
- 如何检查是否引用了javascript变量,以及从哪里引用
- 当链接中引用视频时,是否可以在iPad上以全屏模式打开.mp4
- 这是否在javascript中创建循环引用
- 一旦附加到浏览器中的根对象,引用时根前缀是否必填
- _.find 是否返回对对象的引用?如何正确设置结果的属性
- 我们是否可以安全地从套接字参数的回调中分配对象引用
- 使用依赖注入时,通过引用调用服务或直接调用服务是否有区别
- 编译到 javascript 是否排除了 dart 添加弱引用
- 检查一个变量是否引用了JavaScript中的指定对象
- 如何检查两个变量是否引用同一个DOM对象
- 检查 2 个 JavaScript 字符串是否引用同一个对象