首页 > javascript数组内部对象的方法调用问题,求助?????

javascript数组内部对象的方法调用问题,求助?????

具体代码如下:

var num1={
    toLocaleString:function(){
        console.log('num1');
    },
    'name':"Tom"
};
var num2={
    toLocaleString:function(){
        console.log('num2');
    },
    'name':"Tom2"
};

var num=[num1,num2];
num.toLocaleString();//结果打印出来 num1 和 num2
console.log(num.name);//undefined

为什么数组不可以使用子对象里的属性,但是可以调用子对象里的方法


console.log(num[0].name);
console.log(num[1].name);

你的代码并没有调到子对象的方法
你调的是num__proto__toLocaleString方法,而此方法指向Array.prototype.toLocaleString
关于此方法的实现参考:
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/toLocaleString


你这段代码有点迷惑性,你如果把num1、num2的方法名toLocaleString改为其他的名字就报错了

var num1={
    foo:function(){
        console.log('num1');
    },
    'name':"Tom"
};
var num2={
    foo:function(){
        console.log('num2');
    },
    'name':"Tom2"
};

var num=[num1,num2];
num.foo();//Uncaught TypeError: num.foo is not a function

因为所有的对象都具有toLocaleString()这个方法,内置的。
当调用数组的toLocaleString()方法,它会创建一个数组值的(以逗号分隔的)字符串;为了取得每一项的值,调用的是每一项的toLocaleString()方法。而这个时候你的子对象中恰好有这个方法(覆盖了原型链上的),所以就顺利执行了。

表面上看是数组调用了子对象的方法,实际上是因为数组具有内置的toLocaleString()方法。

【热门文章】
【热门文章】