美文网首页
JavaScript继承模式

JavaScript继承模式

作者: Lnevan | 来源:发表于2021-07-13 12:48 被阅读0次

1,原型链继承

  • 步骤
    • 定义父类型构造函数
    • 给父类型的原型添加方法
    • 定义子类型的构造函数
    • 创建父类型的对象赋值给子类型的原型
    • 将子类型原型的构造属性设置为子类型
    • 给子类型原型添加方法
    • 创建子类型的对象: 可以调用父类型的方法
  • 关键: 子类型的原型为父类型的一个实例对象
function Supper() {
  this.supper = 'supper'
}
Supper.prototype.showSupperProp = function () {
  console.log(this.supper)
}
function Sub() {
  this.sub = 'sub'
}
Sub.prototype = new Supper() //子类型的原型为父类型的一个实例对象
Supper.prototype.showSubProp = function () {
  console.log(this.sub)
}
let s = new Sub()
s.showSupperProp() //supper
console.log(s.constructor) //ƒ Supper() {
                            // this.supper = 'supper'
                            //}

为了让s的constructor指向的是Sub,应该要添加Sub.prototype.constructor = Sub

原型继承.png

2.借用构造函数继承(假的,实际上并没有继承)

  • 步骤
    • 定义父类型构造函数
    • 定义子类型构造函数与
    • 在子类型构造函数中调用父类型构造
  • 关键:在子类型构造函数中通过call()调用父类型构造函数
function Person(name,age) {
  this.name = name
  this.age = age
}
function Student(name,age,sex) {
  Person.call(this,name,age) //相当于this.Person(name,age) 即 this.name = name;this.age = age
  this.sex = sex
}
let s = new Student('Tom',20,'男')
console.log(s.name,s.age,s.sex) //Tom 20 男

3.原型链+借用构造函数的组合继承

  • 利用原型链实现对父类型对象的方法继承
  • 利用call()借用父类型构造函数初始化相同属性
function Person(name,age) {
  this.name = name
  this.age = age
}
Person.prototype.setName = function(name) {
  this.name = name
}
function Student(name,age,sex) {
  Person.call(this,name,age) //为了得到属性,相当于this.Person(name,age) 即 this.name = name;this.age = age
  this.sex = sex
}
Student.prototype = new Person() //为了能看到父类型的方法
Student.prototype.constructor = Student //修正constructor属性
Student.prototype.setSex = function(sex) {
  this.sex = sex
}
let s = new Student('Tom',20,'男')
s.setSex('女')
s.setName('Amy')
console.log(s.name,s.age,s.sex) //Amy 20 女

相关文章

  • JavaScript继承模式

    1,原型链继承 步骤定义父类型构造函数给父类型的原型添加方法定义子类型的构造函数创建父类型的对象赋值给子类型的原型...

  • javascript----继承模式

    我是谁,我来自哪,我是谁的谁 想必大家一定在学习或者开发过程常常被JS独有的原型继承拨过不少脑弦吧,为何不迎问题而...

  • (九)

    寄生组合式继承前面说过,组合继承是JavaScript最常用的继承模式;不过,它也有自己的不足。组合继承最大的问题...

  • JavaScript最全的继承模式

    //js各种继承的分析; function Parent(name,age){ this.name=name; ...

  • (4)JavaScript继承模式二

    上一篇文章说了继承模式,其实上一章节的继承模式是有一点瑕疵的,这个瑕疵并不是由模式引起的,而是由JavaScrip...

  • (3)JavaScript继承模式一

    继承可以使得子类具有父类的属性和方法或者重新定义、追加属性和方法等。继承可以高效利用之前封装过的类,而不影响之前的...

  • JavaScript继承详解(Mixin)

    上一篇JavaScript继承详解(Klass)介绍了各种继承的模式。但究竟为何要继承?一个很重要的目的就是为了代...

  • 模板方法模式

    摘自《JavaScript设计模式与开发实践》 模板方法模式是一种只需使用继承就可以实现的非常简单的模式。 模板方...

  • 深入理解 JavaScript 继承的特性与最佳实践

    继承是代码重用的模式。JavaScript 可以模拟基于类的模式,还支持其它更具表现力的模式。但保持简单通常是最好...

  • 前端面试题目(二)

    javascript对象的几种创建方式 javascript继承的6种方法 详情:[JavaScript继承方式详...

网友评论

      本文标题:JavaScript继承模式

      本文链接:https://www.haomeiwen.com/subject/uaojpltx.html