CodeSky 代码之空

随手记录自己的学习过程

Javascript for-in第二弹-与Object.keys()区别

2014-07-22 22:07分类: JavaScript评论: 0

上一回我们对比了for-in与forEach(其实是辨别),这次说说和Object.keys()的区别。

对于for-inObject.keys(),先看以下代码:

1function Person() {
2}
3
4Person.prototype.name = "Nicholas";
5Person.prototype.age = 29;
6Person.prototype.job = "Software Engineer";
7Person.prototype.sayName = function() {
8    console.log(this.name);
9}
10
11var people1 = new Person();
12
13for (var prop in people1) {
14    console.log(prop);
15}
16
17var keys = Object.keys(Person.prototype);
18console.log(keys);
19
20people1.name = "Rob";
21people1.age = 31;
22var p1keys = Object.keys(people1);
23console.log(p1keys);
24

输出结果为:

name
age
job
sayName
[ 'name', 'age', 'job', 'sayName' ]
[ 'name', 'age' ]

感受一下,关于for (var prop in people1),找出了原型中的属性和方法,完全展示出来(如果想不设置对象,需要使用Person.prototype来代替people1,两者输出相同)

而针对Object.keys(),两者却有着不同的表现。这让人想到了一个属性是存在于原型还是存在于实例的问题,换言之输出存在于那里的属性和方法。

另:检验存在位置可以用person1.hasOwnProperty("name")和`"name" in person1"来检验。

评论 (0)