javascript - 无法遍历本地对象的属性或方法
黄舟
黄舟 2017-04-11 13:06:42
0
1
335
var myObject = new Object(); 
myObject.sitename = "布啦布啦"; 
myObject.siteurl = "blabla.cn"; 
myObject.sitecontent = "网页教程代码图库的中文站点"; 
//遍历对象的所有属性 
for (prop in myObject) 
    {console.log("属性 '" + prop + "' 为 " + myObject[prop]);} 
    

上面可以遍历myObject 的属性
如果是

var myObject=new Array();
for (prop in myObject) 
{console.log("属性 '" + prop + "' 为 " + myObject[prop]);}

无法遍历数组的方法,有些语言如python就可以通过反射将任何对象的属性或方法都遍历出来,
js 不能对本地对象遍历它的方法,真是一个不足哈。

Number对象有这些常见方法:toString,toLocalString,value,toSource,toExponetial,toFixed,toPrecision等等
通常我们不能全部记住吧,如果有一种简单的反射方法,全部列出来,可以减少记忆上的负担。

请看python的反射

>>> x=[1,2,3]
>>> dir(x)

['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__delslice__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getslice__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__setslice__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']

这个x这个数组对象,包含一些方法,属性都遍历出来了,多简洁,减低程序员记忆上的负担。

黄舟
黄舟

人生最曼妙的风景,竟是内心的淡定与从容!

reply all(1)
巴扎黑

这不是不足,而是你的理解没有到位。

for in遍历,只会遍历能够枚举的属性,而Array.prototye里面的方法都是不可枚举的,自然就无法遍历。另外什么情况下我们需要遍历数组?难道不是因为我们想取数组里面的元素吗?如果这个时候把数组的方法遍历出来了,反而奇怪了。所以这个设计完全是合理的。

要列举也行,如下:
Object.getOwnPropertyNames(Array.prototype)

个人认为完全没有必要,查询API是更好的方式。

Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!