引用
视频锁定
{$ currentTime | date:'mm:ss' $}
{$ timeLeft | date:'mm:ss' $}
引用是一个比较有意思的主题,JavaScript 中的引用始终指向最终的对象,而并非引 用本身,我们来看一个例子:
var obj = {};//空对象
var ref = obj;//引用
obj.name = "objectA";
print(ref.name);//ref跟着添加了name属性
obj = ["one", "two", "three"];//obj指向了另一个对象(数组对象)
print(ref.name);//ref还指向原来的对象
print(obj.length);//3
print(ref.length);//undefined
运行结果如下:
objectA
objectA
3
undefined
obj 只是对一个匿名对象的引用,所以,ref 并非指向它,当 obj 指向另一个数组对象时可以看到,引用 ref 并未改变,而始终指向那个后来添加了 name 属性的"空"对象”{}”。 理解这一点对后边的内容有很大的帮助。
再看这个例子:
var obj = {};//新建一个对象,并被obj引用
var ref1 = obj;//ref1引用obj,事实上是引用obj引用的空对象
var ref2 = obj;
obj.func = "function";
print(ref1.func);
print(ref2.func);
声明一个对象,然后用两个引用来引用这个对象,然后修改原始的对象,注意这两步的顺序,运行之:
function
function
根据运行结果我们可以看出,在定义了引用之后,修改原始的那个对象会影响到其引用上,这一点也应该注意。
在线练习
{$ activeFileHint $}