我想知道在obj中声明和使用2个立即数数组时它们如何互相引用
var o = {
push:[].push,
length:0,
toString:[].join,
valueOf:function(){
return arguments[0] == "number" ? this.length : this.toString();
}
};
o.push(1, 2, 3);
o.toString(); // "1,2,3"
(o*1).toString(); // 3
我认为这没什么基础
不需要代码
2个不同的文字数组如何相互引用
答案 0 :(得分:0)
两个数组没有相互引用。实际上,创建o
后,这些数组都不存在。您只是在创建它们,获得对它们的push
和join
方法的引用,然后丢弃这些数组。这些方法没有链接回到您从中获得它们的数组。
看到结果的原因是push
正在使用o
,而不是从中获得方法的数组。 ({push
在非数组上调用时效果很好;大多数数组方法都可以)。
这是一个更简单的情况,说明了相同的概念:
var obj1 = {
setValue: function(value) {
this.value = value;
}
};
var obj2 = {
setValue: obj1.setValue,
showValue: function() {
console.log(this.value);
}
};
obj2.setValue(42);
obj2.showValue(); // 42
setValue
在obj2
而不是obj1
上设置值,因为它被称为obj2.setValue(42)
。
更多: