面向对象和面向过程
面向对象:万物皆是对象
程序 = 对象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 评论