整个JS可以用三句话来概括:
整个JS都是对象,其中包括了:
- 内置对象:字符串、数组、日期、正则、数字、函数等等
- BOM对象:windows、document、location、history
- 自定义对象
什么是面向对象?
面向对象是一个思想,就是把解决问题的注意力集中到对象上,把所有要做的事情通过冒泡形式传递给父级元素。
面向对象的特点?
面向对象有三大特点 :封装 继承 多态
封装:把所有相关的属性和方法封装在一个对象里。
代码展示:
class Person{ constructor (value){ this.value= value } att(animal) { console.log('this is'+ this.value) } static private () { console.log('我是私有受保护方法') } } let newPackage = new Person('你好') newPackage.att() newPackage.private()
上面是个简单的封装例子,通过value参数传递来达到我们想要的结果,但是class类里面的静态方法是不会对外开放的所以会找不到这个函数
继承:自己没有的属性或者方法,把别人的拿来用。
class PackageSon extends Person{ constructor(animal, food){ super(animal); this.food = food } zoo () { console.log('这是'+ this.animal) } eat () { console.log(this.animal+this.food) } } let newPackageSon = new PackageSon('小明', '吃饭') newPackageSon.zoo() newPackageSon.eat()
多态:不同的对象根据事件情况,执行代码不同。
class Son{ go () { console.log('星期一') } sport () { console.log('星期二') } } class request extends Son{ go () { console.log('星期三') } } var newRewriteSon = new request() newRewriteSon.go() newRewriteSon.sport()
request子类继承了父类上面的两个方法,子类中又重新写了相同名字的go方法,所以子类会把继承过来父类中的go方法覆盖掉,从而实现自己想要的操作,打印sport方法时会依旧得出继承父类方法的操作,所以子类只重写了go方法
下面来说一说什么是原型对象
把相同属性和方法写在构造函数的原型对象里构造函数的实例对象 new 出来的实例就全部可以访问原型对象存在的最大作用就是节省内存空间
什么是原型链?
原型链:由各级对象的__proto__逐级继承形成的关系
也就是说当寻找object的某个属性或方法时,如果本身没有就在它的 _ proto_ 里找,如果也没有就在它的 _ proto_ 的 _ proto_ 里找,直到找到null,这就是原型链的思想。然而 _ proto_ 并不能对外公开原型链的作用也就是节省空间
常见的内置对象
Number String Boolean Array Date Math RegExp Function Object Global Error