什么是js面向对象?
1js面向对象是一种思想;2.遵循万物皆对象的准则;程序中的关键模块都可以视为对象,对象都是由属性和方法组成,属性可以理解为对象的特征,是静态的,方法可以理解为对象的行为,是动态的。
3.面向对象会使用对象的属性和方法,它不关注内部的细节和过程;同时也会构造对象。
4.在js中,所有的对象可以分为普通对象和函数对象。而Object ,Function 是JS自带的函数对象。凡是通过 new Function() 创建的对象都是函数对象,其他的都是普通对象。
面向对象有什么特点?
1.抽象
抽象是面向对象最为重要的特征。对象本身的状态与行为,以及对象之间的关系,都是抽象的结果。没有抽象,就没有对象,也就谈不上面向对象了。抽象是一种思维习惯,因此,抽象是面向对象的第一特征。把同类的对象共有的属性或方法抽出封装成单独的对象,在用到的时候给相应的对象使用; 以学生为例,把他的共同属性提取出来,比如,名字,学号等,而像爱玩还是爱学习,好动还是好静等这些不同的属性可以摒弃;
2.继承
简单来说就是一个对象继承另一个对象的属性和方法; 有两种继承方式:1,对象冒充,优点是可以实现多重继承,初始化 继承自父类的参数;缺点是浪费内存资源,所有的实例都会有一份成员方法的副本;2.原型方式,是指利用了prototype或者说以某种方式覆盖了prototype,从而达到属性方法复制的目的。举个例子,儿子能继承父亲的姓,孙子也能继承父亲的父亲的姓;
3.封装
复杂的问题简单化,只考虑功能和结果,不考虑过程和内部细节。 举例jq库的使用。4.多态
同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果。换句话说是引用类型在不同情况下的多种状态; 比如在js中的‘+’,在字符串中是链接作用,在数字中间是加法运算;再比如上课铃响了,上体育课的学生跑到操场上站好,上语文课的学生在教室里坐好一样。 多态最常见的三种方法:重载,重写,接口class类
ES6引入了 Class(类)这个概念,作为对象的模板。
JS 中并没有一个真正的 class 原始类型, class 仅仅只是对原型对象运用语法糖。所以,只有理解如何使用原型对象实现类和类继承,才能真正地用好 class。
基本语法
class 类 继承
通过extends关键字实现类的继承
通过super关键字进行拓展父类构造器或方法
super作用
- 子类使用构造器
constructor的时候,必须使用super关键字,用来扩展构造器 - 子类同名方法会覆盖父类同名方法,使用
super关键字后则可以调用到父类的同名函数
public ,private , protected 修饰符
-
public
公开的,谁都能用(默认public)构造函数,自己,子类,都可以访问
-
private
私有的,仅类自己里头才能使用 -
protected
受保护的,仅仅类和类的子类能使用构造函数不可以使用
ts,interface类型
interface -- 接口类型
想要限制对象的类型,或者当一个对象类型被多次使用时,一半会使用接口(intterface)来描述对象的类型。
注:接口只能为对象指定类型
类实现接口
续要配合implements使用
枚举 enum
我们了解的枚举中,有字符串枚举,数字枚举
数字枚举
数字枚举自带值,默认从0开始,后面的值依次累加
第一个值为0,则第二个值为1,第三个值为2,第四个值.....
若给第一个值设置为1,则第二个值为2,第三个值为3,第四个值.....
以此类推
字符串枚举
如果想要字符串枚举,则必须要自己给定值,字符串枚举没有默认值
ts 继承与js继承相差并不多,主要区别就是定义类型