前端 js 继承的n种方式

简介: 前端 js 继承的n种方式

继承的N种方式

子类能够使用父类的属性和方法


原型链继承

  1. 创建人的类
function Person(name, age) {
  this.name = name
  this.age = age
}
Person.prototype.say = function() {
  console.log('说话了')
}
const p1 = new Person('张三', 19)


创建狗的类

function Dog(name, age) {
  this.name = name
  this.age = age
}
Dog.prototype.say = function() {
  console.log('说话了')
}
const d1 = new Dog('大黄', 3)


狗继承自人的类

// 创建人的类
function Person(name, age) {
  this.name = name
  this.age = age
}
Person.prototype.say = function() {
  console.log('说话了')
}
function Dog() {}
// 此方式不推荐 子原型和父原型公用同一个原型
// Dog.prototype = Person.prototype
Dog.prototype = new Person()
const d1 = new Dog('大黄', 3)


以上则实现原型链继承但是会有以下问题:

  • 包含引用类型值的原型属性会被所有的实例共享
function Person(name, age) {
  this.name = name
  this.age = age
  this.hobby = []
}
  • 创建子类的时候不能传递参数


借用构造函数继承

  1. 创建人的类
// 创建人的类
function Person(name, age) {
  this.name = name
  this.age = age
  this.hobby = []
}


通过 call 实现

function Dog(name, age) {
  Person.call(this, name, age)
}
const d1 = new Dog('大黄', 2)
const d2 = new Dog('小黄', 1)


组合式继承

// 创建人的类
function Person(name, age) {
  this.name = name
  this.age = age
}
Person.prototype.say = function() {
  console.log('说话了')
}
function Dog(name, age) {
  Person.call(this, name, age)
}
// 此方式不推荐 子原型和父原型公用同一个原型
// Dog.prototype = Person.prototype
Dog.prototype = new Person()
const d1 = new Dog('大黄', 3)
const d2 = new Dog('小黄', 2)


寄生式组合继承

Object.create 作用:

  1. 创建对象
  2. 将对象的proto 指向参数对象
// 创建人的类
function Person(name, age) {
  this.name = name
  this.age = age
}
Person.prototype.say = function() {
  console.log('说话了')
}
function Dog(name, age) {
  Person.call(this, name, age)
}
// 此方式不推荐 子原型和父原型公用同一个原型
// Dog.prototype = Person.prototype
Dog.prototype = Object.create(Person.prototype)
const d1 = new Dog('大黄', 3)
const d2 = new Dog('小黄', 2)


es6 类继承

class Person {
  say() {
    console.log('说话了')
  }
}
class Child extends Person {}
const child = new Child()
child.say()


目录
相关文章
|
7天前
|
JavaScript 前端开发 API
详解队列在前端的应用,深剖JS中的事件循环Eventloop,再了解微任务和宏任务
该文章详细讲解了队列数据结构在前端开发中的应用,并深入探讨了JavaScript的事件循环机制,区分了宏任务和微任务的执行顺序及其对前端性能的影响。
|
5天前
|
JavaScript 前端开发 小程序
一小时入门Vue.js前端开发
本文是作者关于Vue.js前端开发的快速入门教程,包括结果展示、参考链接、注意事项以及常见问题的解决方法。文章提供了Vue.js的基础使用介绍,如何安装和使用cnpm,以及如何解决命令行中遇到的一些常见问题。
一小时入门Vue.js前端开发
|
6天前
|
自然语言处理 JavaScript 前端开发
一文梳理JavaScript中常见的七大继承方案
该文章系统地概述了JavaScript中七种常见的继承模式,包括原型链继承、构造函数继承、组合继承、原型式继承、寄生式继承、寄生组合继承等,并探讨了每种模式的实现方式及其优缺点。
一文梳理JavaScript中常见的七大继承方案
|
7天前
|
JavaScript 前端开发
js之class继承|27
js之class继承|27
|
7天前
|
JSON JavaScript 前端开发
js原型继承|26
js原型继承|26
|
7天前
|
JavaScript 前端开发 开发者
深入浅出 Vue.js:构建响应式前端应用
Vue.js 是一个流行的前端框架,以其简洁、高效和易学著称。它采用响应式和组件化设计,简化了交互式用户界面的构建。本文详细介绍 Vue.js 的核心概念、基本用法及如何构建响应式前端应用,包括实例、模板、响应式数据和组件等关键要素,并介绍了项目结构、Vue CLI、路由管理和状态管理等内容,帮助开发者高效地开发现代化前端应用。
|
7天前
|
JavaScript 前端开发
网页前端课程设计-【模仿】香港中文大学官网,轮播图及div+css布局,js的dom操作
这篇文章介绍了如何模仿香港中文大学官网进行网页前端课程设计,包括使用div+css布局、js的DOM操作以及实现轮播图等技术细节。
|
8天前
|
前端开发 JavaScript
前端JS控制网页复制粘贴
前端JS控制网页复制粘贴
|
8天前
|
前端开发 JavaScript
前端JS截取url上的参数
文章介绍了两种前端JS获取URL参数的方法:手动截取封装和使用URLSearchParams。
20 0
|
5月前
|
JavaScript 前端开发
js开发:请解释原型继承和类继承的区别。
JavaScript中的原型继承和类继承用于共享对象属性和方法。原型继承通过原型链实现共享,节省内存,但不支持私有属性。
45 0
下一篇
无影云桌面