zoukankan      html  css  js  c++  java
  • 关于面向对象的简单总结

    、什么是对象:万事万物皆对象
    一切具有相同本质特征和行为的物质 或一切具有属性和方法的事物,都称作对象。
    对象具有两个特性:属性和方法

    对象类型 存储在堆中。

    例如:
    var obj = {
    name : "jack"
    }
    var obj2 = obj ; 将obj的地址传递给obj2
    obj2.name = "lily"
    alert(obj.name)

    什么是面向对象
    面向对象是一种编程思想
    面向过程和面向对象的区别:
    面向过程和面向对象的区别:
    面向过程体现的是一种数学逻辑
    面向对象体现的是一种生活逻辑
    面向对象的优缺点:
    优点: 功能独立 便于后期的管理和维护 防止全局变量污染
    缺点: 开发周期长 成本高
    什么是类(在js中没有类的改变,类就是js中的构造函数)
    类是具有相同本质特征和行为的一类事物的总称

    类和对象的关系:
    类是对象的抽象化(类是对象的抽象) 类是抽象出来的概念
    对象是类的具体化(对象是类的具体实例)
    先有类还是先有对象?
    先有对象 后有累的概念
    编程: var arr = new Array();
    先定义类 ,再从类中创建对象
    3、对象的创建方法
    字面量的创建方式:
    var obj = { }
    var obj = new Object()
    缺点:多个同类对象创建时 代码会重复
    2、使用 工厂模式 创建对象 (设计模式之--工厂模式)
    优点: 解决多个同类对象创建时代码重复问题
    缺点: 对象是通过函数调用的方式创建的 创建对象的方式不规范
    不能确定某个对象属于哪一个类(构造函数)
    3、使用 构造函数 创建对象
    构造函数命名一般是大驼峰格式 ,为了和普通函数进行区分
    构造函数中的属性称为实例属性 构造函数中的方法称为实例方法
    构造函数中的this 指向 构造函数 new 出来的对象
    优点 : 对象使用new 关键字创建的 创建对象的方式规范
    能够确定某个对象属于哪一个类 instanceof
    缺点 : 多个同类对象的方法会被重复创建 空间不共享
    4、 使用 构造函数 创建对象 方法 和属性 都是原创属性 和原型方法
    优点 : 使用原型方法 能够解决多个同类对象创建时 空间不共享问题 原型方法空间共享

    5、混合 方法 创建对象
    属性写在构造函数的内部 作为实例属性
    方法写在构造函数的外部 作为原型方法

    4、 扩展 使用 Object.defineProperty( ) 定义属性 (此内容了解)
    语法: Object.defineProperty(obj , prop , descriptor )
    参数说明:
    obj : 必需 。 目标对象
    prop : 必需 。 需定义或修改的属性的名字
    descriptor : 必需。 目标属性所拥有的特性
    例如:
    var obj = { }
    Object.defineProperty(obj,"newKey",{
    });
    console.log(obj.newKey); // undefined
    设置的特性总结:
    value :设置属性的值
    writable : 值是否可以重写。 true | false false是默认的
    enumerable : 目标属性是否可以被枚举。 true | false 如果是枚举对象
    可以使用for ...in来遍历
    configurable : 目标属性是否可以被删除 true | false

    5、原型对象 prototype 也是一个属性(对象),该属性后面可以添加方法
    每一个函数都有一个原型对象
    每一个构造函数都有一个原型对象
    原型对象上的属性和方法能被实例访问

    原型对象上的属性和方法不能直接 被子类访问(继承中实现)
    JavaScript 的继承机制基于原理 ,而不是Class类

    凡是通过new Function() 创建的对象都是函数对象,其他的都是普通对象
    普通对象没有prototype ,但有_proto_属性
    构造函数没有_proto_ 但有prototype 属性
    prototype属性(对象)会默认获得一个constructor(构造函数)属性,这个
    属性是一个指向prototype属性所在函数的指南针

    所有的构造函数都有一个prototype 属性 ,这个属性就称为原型对象
    所有的构造函数new出来的对象都有一个 _proto_属性 , 这个属性也对应着一个对象
    就是原型对象

    6、原型链
    实例对象和原型之间的连接 就称为原型链
    原型模式的执行流程 :
    首先在实例上查找 找到后就返回
    继续去 OBject.prototype 上查找 找到后就返回

    面试题:

    原型链 作用域链的区别:
    原型链是作用在构造函数上 原型链操作的是构造函数的属性 实例属性 原型属性
    作用域链是作用在普通函数上 作用域链操作的是全局变量或局部变量
    var num = 10;
    function fn( num ){
    num = 90 ;
    }
    fn();
    alert(num);

    7、扩展 原型中的几个关键字
    测试某个对象是否属于某个类的方法 isPrototypeOf( )
    语法:构造函数.prototype.isPrototypeOf(对象):判断一个对象是否指向了该
    构造函数的原型对象,可以使用isPrototypeOf()方法来测试 结果为boolean类型

    delete :删除实例属性
    语法 : delete 对象.实例属性
    hasOwnProperty( ) 是否包含该实例属性 ,包含返回true ,否则返回false
    语法:实例对象.hasOwnProperty("实例属性")

    in 是否存在该属性(原型或实例中)
    语法: “属性” in 对象实例

    设计模式(了解)
    1、什么是设计模式?(以下设计模式内容了解)
    设计模式(Design pattern) 是一套被反复使用 、多数人知晓的 、 经过分类

    编目的 、 代码设计经验的总结。使用设计模式是为了可重用代码,让代码更容易被他人理解,
    保证代码可靠性。设计模式就是一种 编程规范 架构层面的

    2、设计模式之单例模式(重点掌握一下)
    单例:对象只能实例化(创建)一次就叫单例
    单例模式:字面量的对象声明{ } ,其实在设计模式中可以看作是一种单例模式,所谓
    单例模式,就是永远保持对象的一个实例。
    var obj = new Object( ) ;
    var obj = { } ;
    obj = { } 一次只能创建一个对象 - 单例模式
    // 实现单例模式
    // 实现思路 : 将第一次new出来的对象 this 保存到一个变量中 , 返回这个变量
    // 再次创建对象时 , 判断 这个变量中是否含有值,如果有值 ,就直接将这个变量返回
    function Animal( ) {
    //为了防止全局变量的污染 使用私有变量代替 全局变量 ins
    //在构造函数的内部 可以通过 构造函数名.变量 创建一个私有变量
    if(Animal.ins ){
    return Animal.ins ;
    }
    Animal.ins = this
    return Animal.ins ;
    }
    单例模式上的属性可以全局 使用

    3、设计模式之代理模式(了解)
    代理模式:为其他对象提供一种代理 ,并以控制对这个对象的访问。
    function A( ) { 领导
    this.dance = function( ){

    }
    }
    function B( ) { 经纪人
    this . leader = new A( ) ; 代理模式
    this.dance = function( ) {
    if( .. ){
    this.leader.dance( ) ; //在B中实现A中的功能 这个过程就称作代理
    }

  • 相关阅读:
    基础操作
    需要注意
    简单操作
    git指令-版本回退
    设计模式-代理模式
    在idea下遇到的问题汇总
    maven笔记--持续更新
    poi简介
    Win10添加右键在此处打开命令行
    Ajax&Json案例
  • 原文地址:https://www.cnblogs.com/yj199661/p/10497367.html
Copyright © 2011-2022 走看看