javascript数组内部对象的方法调用问题,求助?????
天蓬老师
天蓬老师 2017-04-10 16:12:22
[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

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

天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

全部回复(2)
巴扎黑
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()方法。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号