javacript中的引用
来源:互联网 发布:淘宝店铺显示金牌卖家 编辑:程序博客网 时间:2024/06/10 00:07
引用的概念是javascript的基础之一,引用是一个指向对象实际位置的指针。这是一个极为强大的特性。但有一个前提:实际的对象肯定不会是引用。字符串永远是字符串,数组永远是数组。不过多个变量却能够指向同一对象。Javascript基于的就是这样一个引用系统。这门语言通过维护一系列对其他对象的引用,提高了极大的灵活性。
此外,对象可以包含一系列属性,这些属性也都不过是到其他对象(比如字符串、数字、数组等等)的引用。如果多个变量指向的是同一个对象,那该对象的类型一改变,所有这些变量也会跟着相应的改变。如下所示:两个变量都指向同一个对象,而该对象内容的修改对这两个变量都会产生影响。
例子:多个变量引用同一个对象
//将obj置为空对象
Var obj=new Object();
//objRef现在是另一个对象的引用
Var objRef=obj;
//修改原对象的一个属性
Obj.oneProperty=true;
//我们现在看到,这个改变在两个变量中都反映了出来
//(因为它们引用的是同一个对象)
Alert(obj.oneProperty===objRef.oneProperty)
前文提到,自修改对象在javascript中式很少见的。我们可以来看一个最常出现这种情况的实例:用push()方法来给数组(array)对象添加新元素。因为Array对象实质上是把这些值作为属性保存。多个变量的内容可以同时被修改。
例子:自修改对象的例子
//创建一个数组
Var items=new Array(”one”,”tow”,”three”);
//创建数组的一个引用
Var itemsRef=items;
//将一个元素添加到原数组中
Items.push(“four”);
//这两个数组的长度应该是一致的。
//因为他们指向同一个数组对象
Alert(items.length==itemsRef.length);
必须记住的是,引用指向的只能是具体的对象,而不是另一个引用,不像perl语言中允许多层引用。Javascript里的结构式沿着引用链一直上溯到原来的那个对象。如下列所示。一个例子:实际对象已经改变了,但原来指向它的引用仍然保持指向旧的对象。
例子:修改对象的引用,同时保持完整性
//将items置为字符串的数组
Var items=new Array(”one”,”tow”,”three”);
//将itemsRef置为items的引用
Var itemsRef=items
//将items置为一个新对象
Items=new Array(”new”,”array”);
//items和itemsRef现在指向不同的对象了。
//items指向的是Array(”new”,”array”);
//itemsRef指向的是Array(”one”,”tow”,”three”);
Alert(items!=itemsRef);
最后,让我们来看一个特殊的例子,看似是自修改对象,其结果却产生了一个新的非引用对象。在执行字符串连接操作时,结果总会是一个新的字符串对象,而非原字符串的修改版本
例子:修改对象而生成新的对象
//将item置为一个新的字符串对象
Var item=”test”;
//itemRef现在指向同一个字符串对象
Var itemRef=item;
//将一些新的文本接在这个字符串后面
//注意:这会创建一个新对象,而非修改原对象
Item+=”ing”;
//item和itemsRef的值不相等,因为新的字符串对象已被创建
Alert(item!=itemRef)
- javacript中的引用
- javacript中的click
- javacript中的闭包
- javacript中的this到底是什么
- Javacript中的乘法口诀表
- javacript
- javacript中的false值---crokford第一课笔记
- javacript 函数库
- javacript基本知识
- javacript回车
- Javacript OOP
- javacript小游戏
- javacript语句
- JavaCript日期
- javacript 对象
- Javacript陷阱
- javacript 将字符串中的数据,无重复的放到数组中
- javacript 验证函数
- 屏蔽lephone在模拟器上的烦人Exception
- 质量体系建立的步骤
- sql isnull
- 深度剖析WinPcap之(九)——数据包的发送过程(9)
- Eclipse快捷键大全(转载)
- javacript中的引用
- OpenUrl(全文转载学习用)
- vsftpd 虚拟用户 多用户不同权限管理
- 创建网站快捷方式
- pthread_join
- 深度剖析WinPcap之(九)——数据包的发送过程(10)
- vsftpd虚拟用户 权限配置
- 非递归遍历二叉树
- 深度剖析WinPcap之(九)——数据包的发送过程(11)