对象中的2个不同的文字数组声明互相引用

时间:2019-01-07 13:53:19

标签: javascript object

我想知道在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个不同的文字数组如何相互引用

1 个答案:

答案 0 :(得分:0)

两个数组没有相互引用。实际上,创建o后,这些数组都不存在。您只是在创建它们,获得对它们的pushjoin方法的引用,然后丢弃这些数组。这些方法没有链接回到您从中获得它们的数组。

看到结果的原因是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

setValueobj2而不是obj1上设置值,因为它被称为obj2.setValue(42)

更多: