JavaScript面向对象

JavaScript面向对象

1.1两大编程思想:

1、面向过程

面向过程:POP(Process-oriented programming)

面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候再一个一个的依次调用就可以了。

大象放到冰箱:打开冰箱==》放入大象==》关上冰箱

2、面向对象

面向对象:OOP (Object Oriented Programming)

面向对象是把事务分解成为一个个对象,然后由对象之间分工与合作。

大象,冰箱:都看成对象功能

面向对象和过程区别:面向过程:小项目;面向对象:多人合作大项目

1.2面向对象三大特性

  • 封装性
  • 继承性
  • 多态性

面向对象和过程优缺点

面向过程:

​ 优点:性能比面向对象高,步骤练习紧密 (目标明确)

​ 缺点:不好维护,不易多次使用及扩展

面向对象:

​ 优点:易维护,可复用,可扩展,灵活性高

​ 缺点:性能没有面向过程高(考虑一类、系列问题)

简单程序面向过程,复杂程序用面向对象

ES6中的类和对象

ES5:没有类;ES6:类

类:泛指一类(抽象,思想聚焦不到一起)

对象:类中的具体的某个实例,【属性和方法的集合体】(具体)

例如:人有身高,体重等,但是具体的某个人也有这个属性

属性用来访问,方法用来执行

对象是由属性和方法组成的:

​ 属性:对象有什么【访问】【语法:对象.属性】【arr.length】

​ 方法:对象做什么【执行】【语法:对象.方法()】【arr.push(a)】

​ 属性:事物的特征,在对象中用属性来表示(常用名词)

​ 方法:事物的行为,在对象中用方法来表示(常用动词)

面向对象的思维特点:

​ 1.抽取(抽象)对象共用的属性和方法组织(封装)成一个类(模板)

​ 2.对类进行实例化, 获取类的对象

类class

在ES6中新增加了类的概念,可以使用class关键字声明一个类,之后以这个类来实例化对象。【构造函数实例化对象】

  • 类抽象了对象的公共部分,它泛指某一大类(class)

创建类

语法:class 类名 {属性和方法}【构造函数语法】
注意类名首字母大写
类要抽取公共属性方法,定义一个类
class Star {
};//创建类
var ldh= new Star();//构造函数,new一下:实例化对象

类constructor构造函数

语法:

class Star {
	constructor (uname,age){
		this.uname = uname;
		this.age = age;
	}
}
属性:放到constructor,构造函数里面

注意:类里面的方法不带function,直接写既可

类里面要有属性方法,属性方法要是想放到类里面,我们用constructor构造器

构造函数作用:接收参数,返回实例对象,new的时候主动执行,主要放一些公共的属性

constructor() 方法是类的构造函数(默认方法),用于传递参数,返回实例对象,通过new命令生成对象实例时,自动调用该方法。

注意:每个类里面一定有构造函数,如果没有显示定义, 类内部会自动给我们创建一个constructor() ,

注意:this代表当前实力化对象,谁new就代表谁

类添加方法

语法:注意方法和方法之间不能加逗号,同时方法不需要添加function 关键字


class Star {
//构造函数:属性
	constructor () {}
//方法:
	sing () {}
	dance () {}
}

总结:类有对象的公共属性和方法,用class创建,class里面包含constructor和方法,我们把公共属性放到constructor里面,把公共方法直接往后写既可*但是注意不要加逗号

方法直接调用,属性需要访问

继承

继承:一个类继承另外一个类的方法 extends(延伸,延长)

语法:
​	class Father {}class Son extends Father{}
//让Son 继承Father 的属性和方法

super关键字

super:调用父类的方法(普通方法,构造方法)

当子类也想有自己的构造函数,同时也想继承父类的构造函数的话,那么就要用super

当子类没有constructor的时候可以随意用父类的,但是如果子类也含有的话,constructor会返回实例,this的指向不同,不可以再直接使用父类的东西,就要用super

class Son extends Father {
    constructor(name,age,score){
        super(name,age);
        this.score=scpre;
    }
    qian(){
        super.qian();//如果调用父亲的方法,用super.方法(子类方法和父类方法相同的情况下)
        qian();//优先使用自己的方法
    }
}

方法:如果子类和父类有相同的方法,加入子类依旧想用父类的方法,那么我们要用super

如果子类有自己的构造函数和父类同名的方法,此时不可以直接用父类的东西,需要用super调用父类的方法和构造函数

三个注意点

  • 在ES6中类没有变量提升,所以必须先定义类,才能通过类实例化对象.
  • 类里面的共有属性和方法一定要加this使用.【this.属性/方法】
  • 类里面的this指向问题:
    • constructor 里面的this指向实例对象,
    • 方法里面的this 指向这个方法的调用者
class BUtton {
    constructor(){
        var btn = document.querSelector("input");
        btn.onclick=this.cli;
    }
    cli(){
        conso;e.log('点击了')}
}
var anniu = new Button();

element.insertAdjacentHTML()

将指定的文本解析为HTML或XML,并将结果节点插入到DOM树种的指定位置。不会破坏现有元素。

element.insertAdjacentHTML( position , text)

position:

  • ”beforebegin“ 元素自身的前面 ;

  • ”afterbegin“ 插入元素内部的第一个子节点之前;

  • “beforeend” 插入元素内部的最后一个子节点之后;

  • “afterend” 元素自身的后面

text是要被解析为HTML或XML并插入到DOM树种的字符串。

构造函数原理

创建对象:

1.字面量

var obj = {
    //属性和方法
    //键值对
    //组成对象的成员
    name:"阿飞",
    age:22,
    sex:"男",
    fei:function(){....},
}

访问属性的两种方法:1.对象.属性 2. 对象[‘属性’]

遍历对象

for(var key in 对象){
    //注意:里面不能用对象.属性的方法遍历只能用对象[key]
   console.log( 对象.[key])
}

2.构造函数

var  obj = new Object();
console.log(obj insetanceof Object);
//添加属性
obj.uname = '阿飞';
obj.age = 22;...

3.自定义构造函数

function Person(unanme, age){
    //属性
    this.uname = uname;
    this.age = age;
    //方法
    this.say = function(){}
}
var n = new Person("阿飞"22);

调用用new Person()

构造函数是一种特殊的函数,主要用来初始化对象,

区分构造函数和普通函数:主要取决于使用,如果使用new 函数,就是构造函数;如果直接调用则是普通函数

new在执行时会做四件事:

1.在内存里创建一个空对象

2.让this指向这个空对象

3.执行构造函数里面的代码,给这个新对象添加属性和方法

4.返回这个对象

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值