2018-10-10 18:03:03 -04:00
|
|
|
---
|
|
|
|
id: 587d7daf367417b2b2512b7d
|
2020-12-16 00:37:30 -07:00
|
|
|
title: 迭代所有属性
|
2018-10-10 18:03:03 -04:00
|
|
|
challengeType: 1
|
2020-08-04 15:15:28 +08:00
|
|
|
forumTopicId: 301320
|
2018-10-10 18:03:03 -04:00
|
|
|
---
|
|
|
|
|
2020-12-16 00:37:30 -07:00
|
|
|
# --description--
|
|
|
|
|
|
|
|
现在你已经了解了两种属性: `自身`属性和`原型`属性。`自身`属性是直接在对象上定义的。而`原型`属性是定义在`prototype`上的:
|
2020-08-04 15:15:28 +08:00
|
|
|
|
|
|
|
```js
|
|
|
|
function Bird(name) {
|
|
|
|
this.name = name; // 自身属性
|
|
|
|
}
|
|
|
|
|
|
|
|
Bird.prototype.numLegs = 2; // 原型属性
|
|
|
|
|
|
|
|
let duck = new Bird("Donald");
|
|
|
|
```
|
|
|
|
|
2020-12-16 00:37:30 -07:00
|
|
|
这个示例会告诉你如何将`duck`的`自身`属性和`原型`属性分别添加到`ownProps`数组和`prototypeProps`数组里面:
|
2020-08-04 15:15:28 +08:00
|
|
|
|
|
|
|
```js
|
|
|
|
let ownProps = [];
|
|
|
|
let prototypeProps = [];
|
|
|
|
|
|
|
|
for (let property in duck) {
|
|
|
|
if(duck.hasOwnProperty(property)) {
|
|
|
|
ownProps.push(property);
|
|
|
|
} else {
|
|
|
|
prototypeProps.push(property);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
console.log(ownProps); // prints ["name"]
|
|
|
|
console.log(prototypeProps); // prints ["numLegs"]
|
|
|
|
```
|
|
|
|
|
2020-12-16 00:37:30 -07:00
|
|
|
# --instructions--
|
2018-10-10 18:03:03 -04:00
|
|
|
|
2020-12-16 00:37:30 -07:00
|
|
|
将`beagle`的自身属性都添加到`ownProps`数组里面去。将`Dog`的所有`原型`属性添加到`prototypeProps`数组中。
|
2018-10-10 18:03:03 -04:00
|
|
|
|
2020-12-16 00:37:30 -07:00
|
|
|
# --hints--
|
2018-10-10 18:03:03 -04:00
|
|
|
|
2020-12-16 00:37:30 -07:00
|
|
|
这个`ownProps`数组应该包含`'name'`这个值。
|
2018-10-10 18:03:03 -04:00
|
|
|
|
2020-12-16 00:37:30 -07:00
|
|
|
```js
|
|
|
|
assert(ownProps.indexOf('name') !== -1);
|
2018-10-10 18:03:03 -04:00
|
|
|
```
|
|
|
|
|
2020-12-16 00:37:30 -07:00
|
|
|
这个`prototypeProps`数组应该包含`'numLegs'`这个值。
|
2018-10-10 18:03:03 -04:00
|
|
|
|
|
|
|
```js
|
2020-12-16 00:37:30 -07:00
|
|
|
assert(prototypeProps.indexOf('numLegs') !== -1);
|
2018-10-10 18:03:03 -04:00
|
|
|
```
|
|
|
|
|
2020-12-16 00:37:30 -07:00
|
|
|
在不使用内置方法`Object.keys()`的情况下完成这个挑战。
|
2020-08-04 15:15:28 +08:00
|
|
|
|
2018-10-10 18:03:03 -04:00
|
|
|
```js
|
2020-12-16 00:37:30 -07:00
|
|
|
assert(!/\Object.keys/.test(code));
|
2018-10-10 18:03:03 -04:00
|
|
|
```
|
2020-08-04 15:15:28 +08:00
|
|
|
|
2020-12-16 00:37:30 -07:00
|
|
|
# --solutions--
|
|
|
|
|