JavaScript的语言特性 — 引用

前端技术 everyinch 1112℃ 0评论

reference

引用(reference)的概念是JavaScript的基础之一,“引用”是一个指向对象实际位置的指针。有一个前提:实际的对象肯定不会是引用。多个变量能够指向同一个对象。JavaScript基于的就是这样的一个引用系统,这门语言通过维护一系列对其它对象的引用,提供了极大的灵活性。
此外,对象可以包含一系列属性(property),属性是指向其它对象的引用。通过多个变量指向的是同一个对象,那该对象的类型一改变,所有这些变量也都随之改变。

// 将 obj 置为空对象
var obj = new Object();

// objRef 现在是另一个对象的引用
var objRef = obj;

// 修改原对象的一个属性
obj.oneProperty = true;

// 这个改变在两个变量中都反映了出来
// 因为它们引用的是同一个对象
alert( obj.oneProperty == objRef.oneProperty );

自修改(self-modifying)对象在JavaScript中不常见。例如:用 push() 方法来给数组对象添加新的元素,因为Array对象实质上是把这些值作为属性来保存,所以结果和上面的例子差不多,即多个变量的内容可以同时被修改:

// 创建一个数组
var items = new Array( "one", "two", "three" );

// 创建数组的一个引用
var itemsRef = items;

// 将一个元素添加到数组中
items.push( "four" );

// 这两个数组的长度应该是一致的
// 因为它们指向同一个数组对象
alert( items.length == itemsRef.length );

引用指向的只能是具体的对象,而不是另一个引用。在JavaScript中是沿着作用域链一直上溯的,下面的例子是:实际对象已经改变了,但原来指向它的引用仍然保持指向旧的对象:

// 将 items 置为字符串的数组
var items = new Array( "one", "two", "three" );

// 将 itemsRef 置为 items 的引用
var itemsRef = items;

// 将 items 置为一个新对象
items = new Array( "new", "array" );

// items 和 itemsRef 现在指向不同的对象了
// items 指向的是 new Array( "new", "array" )
// itemsRef 指向的是 new Array( "one", "two", "three" )
alert( items != itemsRef );

需要注意的是:在执行字符串串接操作时,结果是产生一个新的字符串对象,并非是原字符串的修改版本

// 将 item 置为一个心的字符串对象
var item = "test";

// itemRef 现在指向同一个字符串对象
var itemRef = item;

// 将一些新的文本接在这个字符串后面
// 注意:这会创建一个新对象,而不是修改原对象
// the original object.
item += "ing";

// item 和 itemRef 的值不相等了,因为创建了新的字符串对象
alert( item != itemRef );


转载请注明:陈童的博客 » JavaScript的语言特性 — 引用

喜欢 (0)
发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

无觅相关文章插件,快速提升流量