先来说说创建对象的几种方式
- 使用对象字面量
- 使用Object构造函数
- 使用自定义的构造函数
- 使用Object.create()
具体讲讲Object.create方法
- 返回一个对象
- 返回的对象的对象原型__proto__指向了原对象
看如下代码
let myObj = {
name: 'dj',
age: 100
}
let o = Object.create(myObj)
console.log('o === myObj', o === myObj) // false
console.log('o.__proto__ === myObj', o.__proto__ === myObj) // true
从上面就可以看出创建的对象o.__proto__指向的就是原对象myObj,有了这一点就可以看看下面的代码,看输出什么结果
function Son(params) {
this.params = params
}
let o1 = Object.create(Son.prototype)
// 依据 第二点
Son.prototype.say = function () {
console.log('say')
}
console.log(o1.__proto__ === Son.prototype) // true
console.log(o1 instanceof Son) // true
o1.say() // say
第一个true就是上面所说的:返回的对象的对象原型__proto__指向了原对象
第二个true和第三个 say就是对象的原型链和instanceof的问题了,可以去看看我的这两篇文章 1. js原型链 2. js中instanceof详解