js中是依靠什么实现继承的:原型链
原型链的作用是什么:实现继承
首先靠一张图先理解原型链:
每一个构造函数的背后都有系统为其分配的一个原型对象,而这个原型对象依然有构造函数和原型对象,最底层的构造函数就是Object,所以就有一句话叫万物皆可对象。
function Person(name, age) {
this.name = name
this.age = age
}
Person.prototype.type = '哺乳动物'
Person.prototype.country = '中国'
Person.prototype.eat = function () {
console.log(this.name + '吃东西')
}
let p1 = new Person('lisa', 20)
let p2 = new Person('xiaoxiao', 20)
console.log(p1)
console.log(p1.name) //lisa p1自己有name属性
console.log(p1.age) //20 p1自己有age
console.log(p1.type) //哺乳动物 p1自己没有type,但是p1的原型有
console.log(p1.girlFrined) //undefined p1自己没有girlFrined, p1的原型也没有girlFrined
p1.eat() // 吃东西
p1.learn()//报错
p1.toString() //不会报错因为object里面有这个方法
//查看p1的原型
console.log(p1.__proto__.constructor) //Person
console.log(Person.prototype === p1.__proto__) //true
//查看p1的原型的原型
console.log(p1.__proto__.__proto__.constructor) //Object
console.log(Object.prototype === p1.__proto__.__proto__) //true
//查看p1的原型的原型的原型
console.log(p1.__proto__.__proto__.__proto__) //null