Javascr面向对象

面向对象和面向过程

面向对象:万物皆是对象

程序 = 对象1+...+对象n

1.封装
2.继承
3.多态
面向过程:按照步骤进行代码编写

程序 = 算法 + 语法

缺陷

随着问题的增加,无法预知后续代码的发展
复用性太低(目前只谈函数的复用性)

类和对象的概念

类:拥有相同属性和行为的对象的集合

模板

对象:根据类属性和行为创建的实例化

强调唯一性,真实存在的

通过类可以实例化多个该类的对象,每个对象的属性值不同,可以说类好比设计图纸,而对象好比根据图纸建设出来的东西

构造函数和对象

ES5的方法创建类

用函数模拟类:用构造方法在ES5中用构造方法模拟类

//类的定义
function Student(newName,newAge){
//this就是new出来的对象
//被this修饰的变量都是该类的属性this.name = newNamethis.age = newAgethis.eat = function(){//类内的方法如果使用其他的属性和方法。必须加this前缀}
}
//对象的定义
//构造方法必须和new关键字一起调用
let stu1= new Student("lijien",18)
//对象使用
console.log(stu1.name,stu1.age)
stu1.eat()
ES6的方法创建类

标准的创建方法

//class 类名{
//	类体
//}class Student{constructor(newName,newAge){this.name = newNamethis.age=newAge}eat(){console.log("eat")}
}
let stu = new Student("lijien",18)
类的组合
一个类的属性是另一个类的对象
类的依赖
一个类的成员函数的参数,是另一个类的对象

this (函数体内的关键字,根据不同类型函数,作用不同)this是函数的内置对象

1.与事件连接,代表触发事件的元素
2.与普通函数(不是构造函数)连用,代表调用函数的对象本身
3.在与构造方法连用,代表new的对象

面向对象

面向对象:OOP :分析解决问题的步骤,使用函数的方式一步步实现,使用的时候依次调用即可

把大象关进冰箱分为几步

1.分析步骤

​ (1)打开冰箱

​ (2)大象放进去

​ (3)关门

oop与现面向过程区别

面向过程

优点 性能比oop高

缺点 没有面向对象在后期方便维护 扩展性不高

oop

优点 后期方便维护 扩展性高

缺点 性能比面向过程低

类与对象

类: 就是对有相同的属性和行为的对象的集合

对象: 就是根基类的属性和行为的实例化(真是存在的)

总结

面向对象:就是传造出一个机器 用这个机器快速的创建出一个有属性(变量)有方法(函数)的对象

创建对象的方式?

(1)字面量方式

   // 1.字面量let user={uname:"huanghuang",uage:42,sex:"男",love:"女",showname(){console.log("我是一个方法");}}console.log(user.uage)

缺点 :字面量方式是定义对象的简写形式,在创建多个的时候非常麻烦

(2)Object构造器

    let demo=new Object()demo.name="宝贝";demo.home=()=>{console.log("跪下给我换拖鞋");}console.log(demo.name)

缺点 如果我像创建对各对象 那么必须每一次都需要new 然后在逐一添加属性和方法 会有大量的冗余代码。

(3) 工厂函数创建对象

      // 3工厂函数方式创建// 1.创建工厂function sicong(){// 2.创建出一个空对象let obj={}obj.name="sicong",obj.tedian=()=>{console.log("有钱");}// 3返回return obj}let demo=sicong()console.log(demo.name)

缺点:不够灵活 每次都是相同属性和方法的内容

(4)构造函数方式创建

  // (4)构造函数// 特点1:函数的首字母大写(用来区分普通函数)function CreateUser(name){// 特点2:this指向 指向的创建实例化之后的变量(new 之前的变量)this.name=name}// 怎么使用构造函数?// 特点3 必须使用new关键字来创建let demo= new CreateUser("LV")console.log(demo.name)

特点:灵活我们可以使用工造函数按照需要创建出指定的对象

什么是构造函数

构造函数的目的

可以非常方便的创建出一个有属性有方法的对象

特点

1.首字母大写

2.内部的this指向的是生成出来的对象

3.必须使用new关键字创建

(3-1)注意不使用new会怎么样?

function CreateUser(name){this.name=name}// 不使用new关键字 是构造函数错误的使用方式  硬要不用new只会出现undefinedconsole.log(CreateUser("LV"))

特点延续

注意: 构造函数创建出来的内容是什么?实例对象

注意2:在创建实例对象的过程叫什么?实例化

注意3:构造函数中不能有return?可以有 但是写了没有用白写

       function CreateUser(){return "我是构造函数return的字符串"}console.log(new CreateUser())

注意4 我们每次实例化的时候 new 构造函数的名字() 来创建 但是注意 如果不传参数的时候()可以省略

  function CreateUser(){}console.log(new CreateUser)

本文链接:https://my.lmcjl.com/post/6179.html

展开阅读全文

4 评论

留下您的评论.