据我所知,javascript也是基于ECMAscript和actionscript一样,并没有真正通过引用传递对象。至少那是我最近读到的。例如:
function doStuff(myObj){
myObj.name = 'groovy chicken';
myObj = null;
}
var newObj = new Object();
doStuff(newObj);
这是我在“面向Web开发人员的专业Javascript”一书中找到的一个例子。虽然您正在将对象传递给函数,并且添加name属性实际上会将该属性添加到初始对象,但是当您设置为null时,该对象将在本地范围内销毁,而不是在全局范围内销毁。
对我来说,这仍然有点令人困惑,因为你拥有的myObj仍然指向与newObj相同的位置,你可以实际添加或改变属性。唯一的区别是你不能从全球范围内销毁它。
所以我想知道同样的情况是否同样适用于actionscript,因为从我读过的内容来看,actionscript 3实际上是通过引用传递对象而我没有读到任何相反的东西。
答案 0 :(得分:2)
很少有现代编程语言通过引用传递(至少默认情况下)。在“传递...”的扭曲术语中,您通过值传递引用。以下是如何思考:
myObj
和newObj
只是变量,是事物的名称。doStuff()
时,您将名称myObj
绑定到对象的新引用(即引用本身已按值传递)doStuff()
myObj = null
将变量重新分配给任何东西,并且在此过程中,它“破坏”引用,但它不会破坏对象。答案 1 :(得分:0)
我会尽力帮助您理解JavaScript对象的工作原理:
当你说,
var newobj = new Object();
这里,newobj只是在创建Object实例时分配的内存位置的名称。
当您传递newobj时,它会引用内存位置。现在,函数中的myObj是同一内存位置的另一个名称。
添加方法'name'会将其添加到内存位置,因此newobj和myobj都可以使用。
当你将myobj设置为null时,它将删除该命名引用,并且newobj仍然保持活动状态并设置了name属性。
但是,我对动作中的工作原理并不了解。