[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/383766e319e753f716b37dc7edce31c9_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);
~~~
- JS入门教程
- 第1章 JS基本语法
- 练习
- 1.1 补充教程
- 第一节 拓展
- 第2章 控制语句DOM,BOM,事件
- 第一节 错误机制
- 第二节 拓展
- 第三节 事件
- 1-1 事件流
- 1-2 事件处理程序
- 1-2-1 事件获取form-input的值
- 1-2-2DOM0 级事件处理程序
- 1-2-3 DOM2级事件处理程序
- 第四节 if-else
- 第3章 DOM拓展
- 第一节 DOM
- 1.1 补充
- 第二节 DOM02
- 第三节 总结
- 1.节点层次
- 第4章 函数
- 第一节 函数就是值
- 第二节 函数的参数
- 第三节 对象的方法
- 第四节 改变this
- 第5章 数组
- 第一节 数组的方法
- 1.1 创建数数组
- 1.2增删改查的方法
- 1.3数组检查
- 1.4二维数组
- 1.5获取数组中最大的值
- 第二节 数组拓展
- 1.1数组constructor 属性
- 1.2prototype属性
- 1.3获取数组中最大值的方法
- 1.4补充展开语法
- 1.5from对数组迭代
- 1.6遍历
- 1.7 数组下标集合,值的下标
- 第三节 拓展
- 第四节 瀑布流代码实现
- 第6章 基本类型和引用类型的区别
- 第7章 字符串
- 第8章 JS内置对象
- 第9章 动画
- 第10章 正则
- 第一节 创建正则表达式
- 第二节 string中支持正则的api
- 第三节 正则对象的属性
- 拓展学习资料
- 第四节 语法
- 第五节 例子
- 5-1 获取一串字符串中的数字
- 第11章 ajax
- 第一节 原生ajax
- 第二节 http,get,post
- 第三节 跨域
- 3-1 http-server跨域
- 3-2 koa-跨域
- 第四节 jquery-ajax
- 4-1 $.ajax
- 第五节 axios
- 第12章 面向对象
- 第一节 原型
- 第二节 原型链,继承
- 第三节 多态
- 第四节 ajax-http
- 4-1 静态方法http
- 第13章 cookie,LocalStorage,sessionStorage
- 13-1
- 第14章 erros
- 第15章 koa-router
- 第16章 模板化
- JS拓展教程
- 第一章 JS基础
- 第三章 高级语法
- 2-1 闭包
- JS工具
- 第一章 百度地图
- js框架
- mock.js
- JS特效
- 1.简书点击div,滚动到顶部
- 2.jquery 点击a缓慢跳转到对应ID
- 3.获取滚动条距离顶部的高度
- 第二阶段项目
- 2-1.豆瓣数据到mongDB