zoukankan      html  css  js  c++  java
  • 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.对象冒充继承 

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

     

  • 相关阅读:
    【Qt开发】QTableWidget设置根据内容调整列宽和行高
    【Qt开发】Qt在QLabel(QWidget)鼠标绘制直线和矩形框
    【Qt开发】Qt在QLabel(QWidget)鼠标绘制直线和矩形框
    【Qt开发】Qt5.7串口开发
    【Qt开发】Qt5.7串口开发
    Oracle监听配置、数据库实例配置等
    SqlMapConfig.xml中的setting属性 Ibatis mybatis
    Hibernate的like用法
    eclipse逆向生成实体类注解方式或者xml方式
    struts2 ValueStack详解,页面获取值el表达式、ognl表达式
  • 原文地址:https://www.cnblogs.com/shihaiying/p/13276172.html
Copyright © 2011-2022 走看看