文章目录
- 前言
- 1. 使用Object.create(null) 和 直接{}的区别
- 2.子类继承父类
- 3. 子类继承父类---进阶
前言
问题:为什么vue源码中使用Object.create(null)来创建空对象,而不直接使用{}???
1. 使用Object.create(null) 和 直接{}的区别
优势:使用 create 创建的对象,没有任何属性,显示 No properties,我们可以把它当作一个非常纯净的 map 来使用,我们可以自己定义 hasOwnProperty、isPrototypeOf
、toLocaleString、toString 方法,不管是有意还是不小心,我们完全不必担心会将原型链上的同名方法覆盖掉
let a = {
'name': '张三'
}
let b = Object.create(null) // {} 无属性
let c = {} // {} 有属性
2.子类继承父类
简单理解mdn上面的demo,你可以理解为d继承了a,也就是
类式继承
let a = {
'name': '张三'
}
let d = Object.create(a) // {name: '张三'} 继承父类
3. 子类继承父类—进阶
let a = {
'name': '张三'
}
let d = Object.create(a) // {name: '张三'} 继承父类
let e = Object.create(Object.prototype,{
a:{
value: a,
enumerable: false, // 对象的属性是否可以通过for...in循环被遍历
writable: true, // 是否可以修改value属性的值
configurable: true, // 是否阻止某些操作改写该属性(是否可以修改删除值)
}
})