面向对象

1、面向对象 
对象 :
    是一个整体,描述一个事物的所有信息 
    一切具有相同属性和行为的物质
    一切具有属性和方法的事物 
    对象数据类型 都有属性和方法   
 
 document.getElementById("").index = 0;  
面向对象 :  是一种编程思想  
 
面向对象的好处 : 
        功能独立  便于后期的管理和维护
        防止全局变量的污染
 
面向对象  :体现的是生活逻辑
面向过程 : 体现的是数据逻辑 
 
什么是类 :( js中的类就是构造函数) 
    类是具有相同属性和行为的一类事物的总称 
 
对象和类的关系:
      类是对象的抽象化(类是对象的抽象)
      对象是类的具象化(对象是类的实例) 
      先有对象 后有类
      js中:先写构造函数   再写new对象
 
2、对象创建的几种方式  
一、字面量{}创建对象
 var obj = {
    sname : "lichune",  属性
    tel : "666",
    teach : function(){  方法
 
    }
 }
 
二、new方式创建
    var   obj = new Object();
      obj.sname = "lce";
      obj.eat = function(){
 
      }
 
缺点 : 
    创建多个同类对象时,代码会重复     
    此两种方案只适用于一次创建一个对象
 
 
3、工厂模式
工厂模式
    可以创建多个同类的对象
 
创建方式:
1--定义一个函数
    function 工厂(){
        1、创建一个对象
        var obj = new Object();
        2、为对象添加属性和方法
        obj.属性= "值";
        obj.方法= function(){}
        3、返回创建的对象
        return obj
    }
 
优点
    创建多个同类对象时,代码不会重复书写  
缺点
    1、 一般对象是通过new关键字创建的,而工厂模式创建对象只是一种普通函数的调用 , 不符合对象的创建方案   不提倡使用
    2、 不能确定某个对象属于哪一个构造函数
 
 
 
 
instanceof (测试某个对象属于哪一个构造函数)
定义
    用来确定某个对象属于哪个构造函数
 
用法
     对象 instanceof 构造函数名
    例如(arr instanceof Array)
    返回值是布尔类型,正确返回true,错误返回false
 
4、构造函数
说明 :  
    1、一般为了和普通函数进行区分,构造函数的函数名编写规范是  大驼峰 编写规范   
    2、写在构造函数内部的属性叫做实例属性,方法叫做实例方法
    3、构造函数内的this指向通过构造函数new出来的对象
    4、在构造函数内部,如果没有定时器或者事件,this一般指向new出来的对象
 
优点 :
     对象创建方式规范,是通过new关键字创建的
     能确定某个对象属于哪一个构造函数
缺点 :   
            多个同类对象被创建时,相同的方法会被重复创建
 
5、原型方法和属性
将属性和方法写在构造函数的外面
说明 :
    1、写在构造函数外面的属性叫做原型属性
       写在构造函数外面的方法叫做原型方法
    2、通过构造函数.prototype.属性,创建原型属性       
             通过构造函数.prototype.方法,创建原型方法
 
优点 : 
    多个同类对象的相同方法是共享的,不会被重建 
缺点 : 
    所有对象的属性名都相同
 
6、混合
将属性写成实例属性
将方法写成原型方法
解决了上面创建对象时遇到的所有的缺点  
 
7、原型对象(原型对象就是原型)
定义
    所有的构造函数都有一个prototype属性,这个属性就叫做原型对象 
    所有的构造函数new出来的对象都有一个原型对象(__proto__)(前后都是两个下划线)这个属性也指向原型对象
    对象.__proto__
在原型对象上创建的方法是共享的。
Array.prototype   String.prototype 
面试题 : 在Array的原型上实现数组的去重   
 
8、原型模式的执行流程
首先在实例上查找,如果有实例属性或方法就返回。如果没有,就去原型上查找,如果有就返回 
如果原型上没有对应的属性或方法,就去最外层的Object.prototype上查找,如果有就返回,没有返回undefined 
 
9、原型链
实例对象和原型之间的连接,就叫做原型链
 
原型链和作用域链的区别
    作用域链:首先在函数内部查找某个变量,如果有就返回,不再向外查找,否则继续向函数外面查找(作用在普通函数上,查找全局变量和局部变量)
    原 型 链:作用在构造函数上,查找实例属性和原型属性
 
10、原型中的关键字(扩展)
测试某个对象是否属于某个类的方法 isPrototypeOf()
    语法:构造函数.prototype.isPrototypeOf(对象)
    判断一个对象是否指向了该构造函数的原型对象,可以使用isPrototypeOf()方法来测试,结果为boolean类型  同  instanceof
 
delete :删除实例属性
    语法 :delete对象.实例属性
 
是否包含该实例属性 hasOwnProperty()
       语法: 实例对象.hasOwnProperty("实例属性")
    包含返回true,否则返回false
 
是否存在该属性(原型或实例中)in
    语法: "属性" in  对象实例
    存在返回true,不存在返回false
 
思路
1、确定构造函数(特效名称)
2、确定构造函数的属性(特效操作的元素)
3、确定构造函数的功能(特效操作的方法)
        入口方法init (页面一加载后的第一个功能)
原文地址:https://www.cnblogs.com/tis100204/p/10302379.html