## 原型继承
```
function People() {}
People.prototype.name="小明";
People.prototype.age = 20;
People.prototype.say = function() {
console.log("haha");
}
function Student(){}
Student.prototype = new People();
var student= new Student();
console.log(student.age);
```
## 原型继承的优缺点
优点:
1. 实现简单,可实现属性和方法的共享
缺点:
1. 创建子类实例时,无法向父类构造函数传参
2. 属性包含引用类型时,更改子类会将所有的子类都修改
## 构造函数继承
```
function People(name, age) {
this.name = name;
this.age = age;
}
function Student(name, age) {
People.call(this,name,age);
}
var student = new Student("xiaoming", 20);
console.log(student);
```
## 构造函数继承的优缺点
优点:
1. 解决子类共享父类引用属性的问题
2. 解决创建子类实例时,不可以向父类传递参数
3. 可以实现多继承(call多个父类对象)
缺点:
1. 只能继承父类的实例属性和方法,不能继承原型属性/方法
2. 无法实现函数复用,每个子类都有父类实例函数的副本,影响性能
## 组合构造函数+原型
```
function People(name, age) {
this.name = name;
this.age = age;
// 仅在第一次调用的初始化
if (typeof this.say !== 'function') {
People.prototype.say = function() {
console.log("haha");
}
}
}
function Student(name, age) {
People.call(this,name,age);
}
Student.prototype = new People();
var student = new Student("xiaoming", 20);
console.log(student);
```
## 优缺点
优点:
1. 解决子类共享父类引用属性的问题
2. 可以向父类传递参数
3. 函数可以复用
缺点:
1. 调用了两次父类构造函数,生成了两份实例(仅仅多消耗一点内存)
## 寄生组合模式
```
function obj(o) {
function F() {};
F.prototype = o;
return new F();
}
function People(name,age) {
this.name = name;
this.age = age;
// 仅在第一次调用的初始化
if (typeof this.say !== 'function') {
People.prototype.say = function() {
console.log("haha");
}
}
}
function Student(name, age) {
People.call(this,name,age);
}
var f= obj(People.prototype);
f.constructor = Student;
Student.prototype = f;
var student = new Student("xiaoming", 20);
student.say();
```
## 优缺点
优点: 最佳
缺点: 实现较为复杂
- 笔记内容来源
- 你不知道的JavaScript上
- vue
- 环境搭建
- node和npm安装配置
- 安装vue-cli并初始化vue项目
- 安装配置elementUI
- vuex安装配置
- axios安装配置
- main.js
- vue基础入门
- vue-router介绍
- vuex
- vue 原理学习源码学习
- js正则处理v-bind和语法
- 双向绑定
- 虚拟dom
- mvvm和render函数
- vue工作项目笔记
- elementUI 表格分页多选记忆功能
- elementUI表格展开一行
- keepAlive
- vue整合ckeditor5
- this.$router.push 内打开新窗口
- java修改上传图片的权限
- 兼容ie11
- 生成二维码
- base64图片下载(兼容IE10)
- vue新手引导程序intro.js
- vue插件 devtools
- vue刷新当前页面
- vue 锚点导航
- axios
- axios与springmvc
- vue-cli 3搭建vue
- git
- git常用命令
- 正则表达式
- 实例demo
- 1
- 新手引导页
- 纯css3从左显示下划线动画导航菜单
- 纯css3从中间显示下划线动画导航菜单
- css显示密码
- 倒计时时钟
- 星星评分
- 按钮悬停效果
- 步骤条
- css动画按钮
- input标题获得焦点上移
- css图片放大
- css镜像导航栏
- js
- 通信
- for in 和 for of
- 前端安全问题
- Promise
- 掘金冴羽学习笔记
- 模拟call
- 模拟bind
- 闭包
- 1 作用域
- 2 执行上下文栈
- 3 变量对象
- 4 作用域链
- 5 this
- 面向对象
- 基础知识点
- 渲染机制
- 其他
- 判断是否为数组
- http
- css
- 基础知识
- css阴影