重学JavaScript06----- 面向对象之继承
文章目录
继承
继承可以帮助我们将重复的代码和逻辑抽取到父类中,子类只需要直接继承过来使用即可。
1、了解原型链
在真正实现继承之前,我们先来理解一个非常重要的概念:原型链。
从一个对象上获取属性,如果在当前对象中没有获取到就会去它的原型上面获取
2、Object的原型
原型链最顶层的原型对象就是Object
的原型对象
原型链的尽头 [Object: null prototype] {}
- 特殊一:该对象有原型属性,但是它的原型属性已经指向的是null,也就是已经是顶层原型了;
- 特殊二:该对象上有很多默认的属性和方法
3、通过原型链实现继承
了解完原型链,就可以利用原型链来实现继承了
// 父类: 公共属性和方法
function Person() {
this.name = "蜘蛛侠"
this.friends = []
}
Person.prototype.eating = function() {
console.log(this.name + " eating~")
}
// 子类: 特有属性和方法
function Hero() {
this.age= 111
}
var p = new Person()
Hero.prototype = p
Hero.prototype.killing = function() {
console.log(this.name + "正在大开杀戒")
}
// name/age
var hero = new Hero()
// console.log(hero.name)
// hero.eating()
// hero.killing ()
// 原型链实现继承的弊端:
// 1.第一个弊端: 打印hero对象, 继承的属性是看不到的
console.log(hero)
// 2.第二个弊端: 创建出来两个hero的对象
var hero1 = new Hero()
var hero2 = new Hero()
// 直接修改对象上的属性, 是给本对象添加了一个新属性
hero1.name = "金刚狼"
console.log(hero2)
// 获取引用, 修改引用中的值, 会相互影响
hero1.friends.push("蝙蝠侠")
console.