2018-10-08 17:13:57 -04:00
---
2018-09-30 23:01:58 +01:00
id: 587d7daf367417b2b2512b7d
title: Iterate Over All Properties
challengeType: 1
2019-08-05 09:17:33 -07:00
forumTopicId: 301320
2018-09-30 23:01:58 +01:00
---
## Description
< section id = 'description' >
You have now seen two kinds of properties: < code > own< / code > properties and < code > prototype< / code > properties. < code > Own< / code > properties are defined directly on the object instance itself. And < code > prototype< / code > properties are defined on the < code > prototype< / code > .
2019-05-17 06:20:30 -07:00
```js
function Bird(name) {
this.name = name; //own property
}
Bird.prototype.numLegs = 2; // prototype property
let duck = new Bird("Donald");
```
2018-10-08 17:13:57 -04:00
Here is how you add < code > duck< / code > 's < code > own< / code > properties to the array < code > ownProps< / code > and < code > prototype< / code > properties to the array < code > prototypeProps< / code > :
2019-05-17 06:20:30 -07: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"]
```
2018-09-30 23:01:58 +01:00
< / section >
## Instructions
< section id = 'instructions' >
Add all of the < code > own< / code > properties of < code > beagle< / code > to the array < code > ownProps< / code > . Add all of the < code > prototype< / code > properties of < code > Dog< / code > to the array < code > prototypeProps< / code > .
< / section >
## Tests
< section id = 'tests' >
```yml
2018-10-04 14:37:37 +01:00
tests:
- text: The < code > ownProps</ code > array should include < code > "name"</ code > .
2019-07-24 02:32:04 -07:00
testString: assert(ownProps.indexOf('name') !== -1);
2018-10-04 14:37:37 +01:00
- text: The < code > prototypeProps</ code > array should include < code > "numLegs"</ code > .
2019-07-24 02:32:04 -07:00
testString: assert(prototypeProps.indexOf('numLegs') !== -1);
2019-11-27 02:57:38 -08:00
- text: You should solve this challenge without using the built in method < code > Object.keys()</ code > .
2019-07-24 02:32:04 -07:00
testString: assert(!/\Object.keys/.test(code));
2018-09-30 23:01:58 +01:00
```
< / section >
## Challenge Seed
< section id = 'challengeSeed' >
< div id = 'js-seed' >
```js
function Dog(name) {
this.name = name;
}
Dog.prototype.numLegs = 4;
let beagle = new Dog("Snoopy");
let ownProps = [];
let prototypeProps = [];
2020-03-08 07:46:28 -07:00
// Only change code below this line
2018-09-30 23:01:58 +01:00
```
< / div >
< / section >
## Solution
< section id = 'solution' >
```js
function Dog(name) {
this.name = name;
}
Dog.prototype.numLegs = 4;
let beagle = new Dog("Snoopy");
let ownProps = [];
let prototypeProps = [];
for (let prop in beagle) {
if (beagle.hasOwnProperty(prop)) {
ownProps.push(prop);
} else {
prototypeProps.push(prop);
}
}
```
< / section >