对象身上与原型相关的方法
- Object.create
这个方法理解为,以某个对象为原型,创建一个新对象
const blackDog = {
name: '小黑狗',
eat: function() {
console.log(this.name + '爱吃骨头')
}
}
const yellowDog = Object.create(blackDog)
console.log(yellowDog)
// {}
// __proto__:
// eat: ƒ ()
// name: "小白狗"
// __proto__: Object
console.log(yellowDog.__proto__ === blackDog) // true
// 可以看出,小黄狗的原型是小黑狗
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
- Object.setPrototypeOf
这个方法就是为某个对象设置原型,还是上面的例子
const blackDog = {
name: '小黑狗',
eat: function() {
console.log(this.name + '爱吃骨头')
}
}
const yellowDog = {
name: '小黄狗',
play: function() {
console.log(this.name + '爱玩')
}
}
// 小黄狗 原本的原型指向的是Object
yellowDog.constructor === Object // true
yellowDog.__proto__ === Object.prototype // true
// 现在为其设置原型
Object.setPrototypeOf(yellowDog, blackDog)
// 再看
console.log(yellowDog)
// name: "小黄狗"
// play: ƒ ()
// __proto__:
// eat: ƒ ()
// name: "小黑狗"
// __proto__: Object
yellowDog.__proto__ === blackDog // true
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
- Object.getProttoeypOf
这个方法是获取对象的原型,继续第二个方法的例子
Object.getPrototypeOf(yellowDog) === blackDog // true
1
2
3
2
3
- Object.hasOwnProperty
这个方法检测某个对象身上是否有 某个属性,不包括原型上面的
var dog = {name: 'xiaobai'}
dog.__proto__.age = 3
dog.hasOwnProperty('name') // true
dog.hasOwnProperty('age') // false
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
- Object.getOwnPropertyNames
这个方法用来获取某个对象身上所有的属性,返回的是一个数组,包括不可枚举的,但是也不包括原型上面的
继续上面dog的例子
Object.getOwnPropertyNames(dog) // ["name"]
1
- Object.keys 这个方法用来获取某个对象身上所有的属性,返回的是一个数组,不包括不可枚举的,也不包括原型上面的
和 Object.getOwnPropertyNames
的区别就是它不能获取不可枚举的属性 enumerable: false
Object.keys(dog) // ["name"]
1
- for in
这个循环可以遍历出一个对象的所有属性,包括原型上面的,但是不包括不可枚举的
var dog = {
name: 'xiaobai',
}
dog.__proto__.age = 2
Object.defineProperty(dog, 'sex', {
configurable: false, // sex属性描述不可改,且不可被删除
writable: false, // 只读
enumerable: false, // 不可枚举
value: '母狗'
})
for (let key in dog) {
console.log(key)
}
// name
// age
// 结果一目了然
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
- Object.getOwnPropertyDescriptor
这个方法用于获取一个对象身上某个属性的描述信息
以上面的小母狗为例
Object.getOwnPropertyDescriptor(dog, 'sex')
// {
// configurable: false
// enumerable: false
// value: "母狗"
// writable: false
// __proto__: Object
// }
// 可见就是我刚设置的描述信息
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13