javascript第十三天面向对象

js面向对象

  1. 面向对象初识

(1)     Oop  面向对象编程  是一种编程思想

(2)     对象和类的概念

①    对象是用来描述信息的数据

1)       属性:静态的, 用来描述对象的一些静态特征

2)       方法:动态的, 用来描述对象的一些动态行为

②    类

1)       类可以用来创建对象, 一个类可以创建任意个对象。(es5中不存在类的概念)

2)       构造函数

(3)     我们以前的编程思路 叫做 面向过程   今天学习的思路为面向对象

①    面向对象的优势:高内聚低耦合,

②    缺点:不符合人类的逻辑思维

(4)     面向对象的三大特征

①    封装:我们将不同的功能模块封装为 对象 从而降低不同功能模块之间的关联,做到高内聚低耦合

②    继承:

③    多态:js中不存在严格的多态,js中多态的定义是 同一操作 在不同环境中 会得到不同的结果

1)       +   1+1 = 2  “1”+1 = “11”

  1. 面向对象创建

(1)     字面量创建对象  {属性名:属性值}

①    优势:写法简单,直观

②    缺点:无法批量创建对象

(2)     实例创建对象  var obj = new Object()  obj.属性名 = 属性值...

①    优势:类型很明确

②    缺点:创建更加繁琐,不利于批量创建

(3)     工厂模式创建

function factory(name,age,hobby){

           var obj = new Object();

            obj.name = name;

            obj.age = age;

            obj.hobby = hobby;

 

            return obj;

        }

①    优势:可以批量创建对象

②    缺点:this的值是window 不是创建出的对象,不方便后续操作

(4)     构造函数

function Teacher (){

//js偷偷创建一个空对象  obj

//js将构造函数的this 赋值为 obj  this = obj

            this.name = "老肖";

            this.age = "18";

            this.hobby = "电音";

//js将绑定好属性的obj对象 隐式返回出来  我们看不到

        }

①    构造函数执行过程

1)       Js隐式创建空对象   js偷偷创建出了一个空对象 obj{}

2)       Js将构造函数的 this 赋值为 隐式创建的空对象 obj

3)       执行构造函数中 的 代码 通过this 给空对象绑定属性

4)       Js会将 绑定好属性的 obj对象 隐式返回出来

②    构造函数的this 的 值 就是 创建出的对象

③    优点:代码编写简单、this的值 就是 创建的对象,便于后续操作

④    缺点:当出现重复属性的时候 就很容易造成 内存浪费

(5)     原型创建

function Teacher (){}

        Teacher.prototype.name = "lx";

        Teacher.prototype.age = "18";

        var son = new Teacher();

①    优点:节省内存

②    缺点:过于死板,属性值无法改变

(6)     混合式创建对象

①    将容易改变的属性 放在构造函数中给对象绑定  将不易改变的属性放在原型中 最大限度节省内存

function Teacher (name,age){

            this.name = name;

            this.age = age;

        }

        Teacher.prototype.belong = "中公教育";

②    优点:可以用构造函数 控制容易改变的属性值  又可以在原型中最大限度节省内存空间

  1. 面向对象实例

(1)     遇到问题,有对象就用对象,没有对象就创建对象然后用对象

(2)     面向对象思路

①    分析当前创建的对象中 有哪些需要描述的不确定值 用构造函数给自对象绑定这些属性

②    分析当前对象要执行哪些具体功能 在原型中封装方法 继承给子对象

  1. 面向对象继承  请关注下榻天涯的故事

(1)     对象的命名空间

①    一般当我们的项目做的比较大的时候 变量命名 往往不够用,我们就可以使用命名空间

②    Var a = 20   window.a = 20

③    Var zone = {}

④    Zone.a = 30

⑤    Zone.a

(2)     原型链继承

①    原型链:在子对象 和 Object.prototype中 存在一个由__proto__连接起来的链式结构,我们称之为 原型链  子对象 可以 使用 原型链中的所有属性

②    原型链的属性查找原则:当对象调用属性的时候 会先在当前对象中查找,如果有就使用,如果没有 就向原型中查找,如果有就使用,如果还没有,就继续向上一级原型中查找, 一直找到Object.prototype,如果有就使用, 如果还没有,值为undefined

③    优点:可以最大程度节省内存

④    缺点:难以随意改变属性的值 因为是继承过来的 会导致其他子对象一起变化

(3)     对象冒充继承

①    call和apply

1)       Call和apply统称为立即执行函数, 他们都是函数的方法,都是用来改变函数的this指向的。

2)       用法:

  1. Call:函数名.call(要改变的this指向,原函数需要的实参1,实参2......)
  2. Apply:函数名.apply(要改变的this指向,[原函数需要的参数1,参数2...])

3)       作用:首先将原函数的this值改变,立即调用原函数

4)       优点:可以很方便的修改对象的属性值

5)       缺点:不能继承到原型链中的属性

(4)     组合式继承

(5)     寄生组合式继承

 

posted @ 2020-10-09 19:05  默默的1  阅读(72)  评论(0)    收藏  举报