• JavaScript学习笔记---面向对象


    ##  面向对象   面向过程     类

    ## 对象 【键值对,属性名,属性值】

    ## 创建对象

    ## 1.字面量创建对象 根据特征

        var obj = {
            name:'aa',
            fn:function(){}
        }
        console.log(obj.name);
        obj.fn();
        
        缺点: 不适合创建大量对象,会造成代码冗余

    ## 2.实例创建对象 根据关键字 

        var obj = new Object();  ==> 相当于  var obj = {}
        obj.属性名 = 属性值;
        obj.方法名 = function(){}
        
        缺点: 不适合创建大量对象,会造成代码冗余

    ## 3.工厂模式 【封装实例创建方法,并且记得return】

        function 函数名(a){
            var obj = new Object();     准备原材料
            obj.属性名 = a;             加工
            obj.方法名 = function(){}

            return obj;                 推出工厂,走向世界
        }

        instancof检测来源
        console.log(n1 instanceof 工厂模式函数名);    false
        console.log(n1 instanceof Object);            true

        缺点: 用instanceof检测发现无法识别具体来源

    ## 4.构造函数式创建对象

         构造函数特点:
            1.函数名首字母大写【不是必须,是约定】
            2.this来赋值         【重点】
            3.实例化时需要加new  【重点之重点】
            4.用this赋值时,无需return

            function Abc(a,num){   // 函数名首字母大写
                this.name = a;     // 用this赋值
                this.age = num;
                this.fn = function(){

                }
            }
            var n1 = new Abc('Alice',19);    // 实例化构造函数时 加 new  ************
            console.log(n1 instanceof Abc);  // true  可以识别来源

            缺点: 实例化对象时,会重新创建该对象中的方法,造成内存浪费

    ## 5.原型创建对象

        原型:prototype  【只有函数有】
        属性:__proto__  【大范畴对象都有】

        原型链:一种指向关系。该对象的__proto__属性,指向了它的构造函数的原型。最终指向指向空(null)。
            
            function Fn(a){  // 构造函数
                this.name = a;
                
            }
            // 在构造函数的原型上添加属性和方法,并且他们是共享的。
            Fn.prototype.age = 10;
            Fn.prototype.fun = function(){
                console.log(11111)
            }
            var s1 = new Fn('Ann');  // {}
            var s2 = new Fn('Bob');

            console.log(s1.fun == s2.fun);  // true

        注: 构造函数prototype【原型】上的属性和方法是共享的。

        缺点: 不能传参

    ## 混合开发 【构造函数+原型创建】

        构造函数 中 放私有
        原型方法 中 放公共

    ## 改变this指向  功能完全一致,传参方式不同

        1.call

        函数名.call(新指向,实参1,实参2......)

        2.apply

        函数名.apply(新指向,[参数1,参数2])

        3.bind

        var 变量名 = 函数名.bind(新指向,参数1,参数2......)
        变量名();

    ## 面向对象继承

        1.原型链继承  

          单向   【构造函数体内的私有方法和 构造函数原型上的公共方法 都能被继承】
            function A(){}

            function B(){}   

        2.对象冒充继承 

          单向  【只能继承构造函数上的私有方法 不能继承 该构造函数 原型上的属性和方法】

     

  • 相关阅读:
    Windows消息机制
    inherited 为什么可以调用父类的private函数? [问题点数:100分,结帖人:h2plus0]
    C++Buidler6中需要注意的几个问题
    BGA封装芯片拆装全程纪实
    Delphi组件开发教程指南(四)组件生成过程(TWinControl)
    Delphi技巧集六 (等待执行完一个外部程序再执行另一个程序)
    C++ Builder高级应用开发指南
    干掉“Spirale”病毒
    完全看懂新世代x86指令集結構
    Delphi 组件撰写常问问题delphi 在整合环境中如何找出组件所产生的问题
  • 原文地址:https://www.cnblogs.com/shihaiying/p/13276172.html
Copyright © 2020-2023  润新知