[TOC]
## JS的继承是基于原型的继承
* 面向对象编程很重要的一个方面,就是对象的继承。A 对象通过继承 B 对象,就能直接拥有 B 对象的所有属性和方法。这对于代码的复用是非常有用的。
* 大部分面向对象的编程语言,都是通过“类”(class)来实现对象的继承。JavaScript 语言的继承则是通过“原型对象”(prototype)。
### 1.构造函数的缺点
JavaScript 通过构造函数生成新对象,因此构造函数可以视为对象的模板。实例对象的属性和方法,可以定义在构造函数内部。
```
var Person = function(name,age){
this.name = name;
this.age = age;
}
var chengchao = new Person("程超",18)
console.log(chengchao.name); //"程超"
console.log(chengchao.age); //18
```
> 通过构造函数为实例对象定义属性,虽然很方便,但是有一个缺点。同一个构造函数的多个实例之间,无法共享属性,从而造成对系统资源的浪费。
```
//eg:
var Person = function(name,age){
this.name = name;
this.age = age;
this.see = function(){
console.log(this.name+"爱看片")
}
}
var chengchao = new Person("程超",18)
chengchao.see();
```
### 2.这个问题的解决方法,就是 JavaScript 的原型对象(prototype)
```
var Person = function(name,age){
this.name = name;
this.age = age;
}
Person.prototype.see = function(){
console.log(this.name+"爱看片")
}
var chengchao = new Person("程超",18);
var lisi = new Person("李四",19);
chengchao.see();
lisi.see();
```
> 在原型上生成see方法,所有的对象共享改方法
![](https://box.kancloud.cn/656ffdf32dc33a051f8273ca393e098c_800x656.png)
> Eg:像数组字符,的一些常用的方法就是放在原型上
```
Array.prototype.getMax = function(arr){
return Math.max(...arr);
}
var arr = [1,2,3];
arr.getMax(arr);
//在数组的原型上定义一个say方法,所有实例化的对象都拥有了say方法
```
JavaScript 继承机制的设计思想就是,原型对象的所有属性和方法,都能被实例对象共享
总结一下,原型对象的作用,就是定义所有实例对象共享的属性和方法
```
var Person = function(name,age){
this.name = name;
this.age = age;
}
Person.prototype.see = function(){
console.log(this.name+"爱看片")
}
Person.prototype.sex="男";
Person.prototype.like ="看美女";
var chengchao = new Person("程超",18);
console.log(chengchao.like);
```
- 效果实例
- 1.点击增加高度
- 2.tab页面切换
- 3. 列表切换
- 4. 隔行变色
- 5. swiper 轮播
- 6.vue
- 7.定时器
- 8. 向表格中添加数据
- 9 瀑布流
- 1.JavaScript基础
- 1. 变量
- 2. 调试
- 3.数据类型
- 4.转换
- 5.控制语句
- 6.运算
- 7. this
- 8 JSON对象和javascript对象的相互转换
- 2.JavaScript的控制语句
- 1. 基本控制语句
- 2.节点
- 2.1DOM补充
- 3. 函数
- js的模块化如何解决
- 不知道有什么用的
- 4.数组
- 5. String
- 补充
- 6.Ajax
- 1. 原生Ajax
- 2. HTTP/get/post
- 3.jQuery-Ajax
- 4.跨域
- 5.axios
- 6.封装
- Ajax效果
- ajax补充
- 7. 正则
- 1.创建正则表达式
- 2. 正则的api
- 3.正则语法
- 4.例子
- 量词
- 8.面向对象
- 1.原型
- ES6
- 模块化
- 1.回调地狱
- 什么是回调地狱
- 简单封装
- promise解决回调地狱
- generator解决回调地狱
- async解决回调地狱
- 2.封装
- Ajax,promise
- JavaScript难点
- 1. 闭包/作用域
- 2.原型链
- 3. 兼容性
- 适配
- JavaScript小效果
- 字符串截取