zoukankan      html  css  js  c++  java
  • js面向对象

    单例设计模式(SingLeton Pattern)

    var一个变量,存储一个对象

    var person={
        name:"xa",
        age:18
    }

      1.表现形式 var obj={xxx:xxx} 。在单例设计模式中,obj不仅仅是对象名,他被称为“命名空间”【NameSpace】,把描述事务的谁能够存放在命名空间中,多个命名空间是独立分开的,互不冲突。 
      2.作用:把描述同一件事务的属性和特征进行归类(存储在同一个堆内存中),因此避免了全局变量之间的冲突和污染。 
      3.单例设计模式命名的由来:每一个命名空间都是JS中Object这个内置基类的实例,而实例之间是相互独立互不干扰的。所以我们称之为“单例:单独的实例”

    高级单例模式

    1 var nameSpace=(
    2     var n=0;
    3     function fn(){
    4     }
    5     return {
    6         fn:fn
    7     }
    8 )()

      1.在给命名空间赋值的时候,不是直接赋值一个对象,而是先执行匿名函数,形成一个私有作用域AA(不销毁的栈内存),在AA创建一个内存,把堆内存的地址赋值给命名空间。

       2.这种模式的好处:我们完全可以在AA中创造很多内容(变量OR函数),哪种需要外部调取使用的,我们暴露到返回的对象中(模块化实现的一种思想)

     1 var n=2;
     2 var obj={
     3     n:3,
     4     fn:(function (n){
     5      n*=2; 
     6      var n=5;
     7      return function (m) {
     8          console.log(m+(++n)
     9         }
    10     } )(n)
    11 };
    12 var fn=obj.fn;
    13 fn(3);
    14 obj.fn(3);
    15 console.log(n,obj.n);

    面向对象编程

    整个JS就是基于面向对象设计和开发出来的语言,我们学习和实战的时候也要按照面向对象的思想去体会和理解

    • 对象:万物皆对象
    • 类:对象的具体细分(按照功能特单进行分类:大类,小类)
    • 实例:类中具体的一个事物(拿出类别中的具体一个实例进行研究,那么但钱类别下的其他实例也具备哲学特点和特征)

    JS中的内置类 
    Object对象类(基类)

    • JS中的任何数据类型都是它所属的类,除了nullundefined
    • 类的首字母都是大写

    构造函数constructor

    基于构造函数创建自定义类(constructor

    • 1 在普通函数执行的基础上“new xxx()”,这样就不是普通函数执行了,而是构造函数执行,当前的函数名称之为“类名”,接受的返回结果是当前类的一个实例
    • 2 自己创建的类名,首字母大写
    • 3 这种构造函数设计模式,主要用于组件 类库 插件 框架等的封装,平时编写业务逻辑一般不这样处理

    JS中创建值有两种方式(都是Object的实例)

    • 字面量表达式 var obj={};(js中的单例模式)(创建出来的值是基本数据类型)
    • 构造函数模式 var obj=new Object();(创建出来的值是引用数据类型)

    构造函数执行的机制

    • 形成一个私有的作用域
    • 形参赋值 变量提升
    • 浏览器会创建一个对象,[开辟一个新的堆内存],将这个对象指向了this[堆内存指针指向this实例]
    • 代码从上到下执行
    • [构造函数特有]代码执行完成,把之前 创建的堆内存地址返回(浏览器默认返回)
    • 判断当前构造函数是否有return, 
      • return的是一个基本值,返回的结果依然是类的实例,没有收到影响
      • 如果返回的是引用值,则把默认返回的实例覆盖,此时接受到的结果就不再是当前类的实例了
    • 构造函数中:建议不要轻易return引用数据类型

    原型链设计模式

    原型(prototype) 原型链(__proto__

    • 函数:普通函数 ,类(所以的类:内置类,自己创建的类)
    • 对象 :普通对象,数组,正则,Matharguments,实例书对象类型的(除了基本类型的字面量创建的值),函数的prototype属性,函数也是对象,...

    原型的三句话

    • 所有的函数数据类型都天生自带一个属性:prototype(原型),这个属性的值是一个对象,浏览器会默认给他开辟一个堆内存
    • 在浏览器给prototype开辟的堆内存中有一个天生自带的属性:constructor,这个属性存储的值就是当前函数本身
    • 每一个对象都有一个__proto___的属性,这个属性指向当前实例所属类的prototype(如果不能确定他是谁的实例,都是Object的实例)

    原型链

    他是一种基于__proto__向上查找的机制,当我们操作实例的某个属性或者方法的时候,首先找自己空间中私有的属性或者方法

    • 1。找到了,则结束查找,使用自己私有的即可
    • 2。没有找到,则基于__proto__找到所属类的prototy,如果找到就用这个公有的,如果没有找到,基于原型上的__proto__继续向上查找,一直找到Object.prototype的原型为止,如果没有,操偶作属性的方法不存在

    类的继承

    什么是继承? 
    子类继承父类中的一些属性和方法

    原型继承

    让子类的原型指向父类的实例 
    children.prototype=new Parent();

    [细节] 
    1、我们首先让子类的原乡指向父类的实例,然后再向子类原乡上扩展方法,防止提前增加方法,等原型重新指向后,之前在子类原型上扩展的方法就没有了(子类原型已经指向新的空间地址) 
    2、让子类原型重新指向父类实例,子类原型上原有的constructor就没有了,为了办证构造函数的完整性,我们最好给子类的原型重新设置constructor

     

  • 相关阅读:
    HTML5——WEB存储学习笔记
    show()与showDialog()的区别
    如何为winform程序打包(图解)
    Winform打包程序制作的快捷方式指向错误的位置(指向安装包文件)
    HTML5 ——range学习笔记
    引用 Eclipse异常退出的解决办法
    sql查询数据库中所有包含要查询内容的存储过程、视图等
    sql查询数据库中所有包含要查询内容的存储过程、驶入
    SQL Union和SQL Union All用法
    sql查询数据库所有表(select * from sysobjects )
  • 原文地址:https://www.cnblogs.com/xiaoqi520/p/9994230.html
Copyright © 2011-2022 走看看