JavaScript的 编程思想
1.面向过程(pop) -----> 按照步骤一步一步进行
2.面向对象(oop)------> 以对象功能来划分
面向对象的特性
1.封装性 ---> 代码封装 直接使用
2.继承性 ---> 继承父类方法
3.多态性--->不同的环境展示不同的状态
优缺点
面向过程 :
优点: 性能比面向对象高
缺点: 没有面向对象易维护,易复用,易扩展
面向对象 :
优点: 易维护,易复用,易扩展
缺点: 性能比面向过程低
总结:萝卜青菜各有所爱,没有好坏,只有合适;
废话终于说完了......
对象和类是什么?
对象 : 万物皆对象;
对象是由属性和方法组成的
类 : 描述对象特征的集合
把对象的属性和方法拿出来组成一个类
类中有一个函数 constructor 构造函数,
用于传递参数,返回实例对象 new实例化的时候会自动调用
对象是由实例化类生成的,类是对象的属性和方法抽象出来的
//创建类
class Man{
constructor(name){
this.name = name
}
}
//创建对象
var rbx = new Man('bob')
运行流程:
//1.new Man()的时候 调用 constructor方法,把bob传给构造函数
//2.this 指向实例化的对象 this 指向 rbx
//3.this.name=name 等于 rbx.name = bob
继承 extends
通俗一点就是子女继承父亲的姓氏
//1创建一个父亲
class Father{
constructor(){
//var son = new Son() 实例化没有传值 就空着就可以
}
Surname(name){
console.log(`你爸爸姓${name}`)
}
}
//儿子继承父亲的姓氏
class Son extends Father{
}
var son = new Son()
//因为儿子继承了父亲所有的东西
//儿子也可以调用父亲里面的方法
son.Surname('任')
class Father{
sum(){
return '我是爸爸'
}
}
class Son extends Father{
sum(){
console.log(super.sum()'的儿子')
}
}
super()可以调用父类的中的函数,指向的是父类
注意
1继承中输出 属性或者方法 执行就近原则
如果实例化子类,先看子类中有没有这个方法,如果没有再去父类查找
一般class声明的类都大写
如果在constructor使用super()必须放到this前面
class Father{
constructor(x,y){
this.x = x;
this.y = y;
}
sun1(){
console.log(this.x+this.y)
}
}
class Son extends Father{
constructor(x,y){
super(x,y) //规定使用super()应该放到this前面 这里的x,y 是父类的构造函数的x,y
this.x = x;
this.y = y
}
sun(){
console.log(this.x-this.y)
}
}
var son = new Son(5,3)
son.sun1() //8
son.sun() //2
总结:
1.在ES6中 类没有变量提升, 所有必须先定义类 ,才能通过类实例化对象
2.类 里面的属性和方法 一定要加this使用
3.constructor 里面的this 指向创建的实例对象
4.函数里的this 指向 这个函数的调用者