zoukankan      html  css  js  c++  java
  • 初次接触面向对象的javascript

    一、对象作用域

    function ClassA(){
        var v = "我是变量 v";
        this.v = "我是属性 v";
        var me = this;
        
        ClassA.prototype.F = function(){
            alert("我是可供外部访问的函数");
        }
        function _F(){
            alert("我只是一个内部函数,外部不能访问我。");
        }
        ClassA.prototype.F2 = function(){
            alert(v);       //OK
            alert(this.v);  //OK
            _F();           //OK
            F();            //错
            this.F();       //OK
        }    
        function _F2(){
            F();            //错
            this.F();       //错
            me.F();         //OK
        }
    }
    var objA = new ClassA();
    alert(objA.v);          //显示“我是属性 v”
    objA.F2();              
    objA._F2();             //系统报错,提示缺少对象

    二、改写

    function ClassA(){
        var v = "我是变量 v";
        this.v = "我是属性 v";
        
        if (typeof ClassA._initialized == "undefined"){
            ClassA.prototype.F = function(){
                alert("我是可供外部访问的函数");
            }
            ClassA._initialized = true;
        }
            
        function _F(){
            alert("我只是一个内部函数,外部不能访问我。");
        }    
    }
    var objA = new ClassA();
    objA.v = "我是属性 v,现在被重新赋值鸟";
    ClassA.prototype.F = function(){
                alert("我是可供外部访问的函数,现在被改写鸟");
            }
    alert(objA.v);          //显示“我是属性 v,现在被重新赋值鸟”
    objA.F();               //显示"我是可供外部访问的函数,现在被改写鸟"



    function ClassA(){
        this.v = "我是属性 v";
    
        if (typeof ClassA._initialized == "undefined"){
            ClassA.prototype.F = function(){
                alert("我是可供外部访问的静态函数 F");
            }
            ClassA._initialized = true;
        }
        
        this.F2 = function(){
            alert("我是可供外部访问的函数 F2");
        }
    }
    var objA1 = new ClassA();
    var objA2 = new ClassA();
    ClassA.prototype.F = function(){
                alert("我是可供外部访问的静态函数 F,被修改鸟。");
            }
    objA1.F2 = function(){
            alert("我是可供外部访问的函数 F2,被 objA1 修改鸟");
        }
    objA1.F();  //我是可供外部访问的静态函数 F,被修改鸟。
    objA2.F();  //我是可供外部访问的静态函数 F,被修改鸟。
    objA1.F2(); //我是可供外部访问的函数 F2,被 objA1 修改鸟
    objA2.F2(); //我是可供外部访问的函数 F2

    三、继承

    function ClassA(){
        this.vA = "我是 ClassA 的属性 vA";
    
        if (typeof ClassA._initialized == "undefined"){
            ClassA.prototype.F = function(){
                alert("我是 ClassA 可供外部访问的静态函数 F");
            }
            ClassA._initialized = true;
        }
        
        this.F2 = function(){
            alert("我是可供外部访问的函数 F2");
        }
    }
    
    function ClassB(){
        this.vB = "我是 ClassB 的属性 vB";
    }
    ClassB.prototype = new ClassA();
    
    var objA = new ClassA();
    var objB = new ClassB();
    alert(objB.vA);     //我是 ClassA 的属性 vA
    alert(objB.vB);     //我是 ClassB 的属性 vB
    objB.F();           //我是 ClassA 可供外部访问的静态函数 F
    objB.F2();          //我是可供外部访问的函数 F2
    ClassB.prototype.F = function(){
                alert("我是 ClassA 可供外部访问的静态函数 F,被 ClassB 修改鸟。");
            }
    objA.F();           //我是 ClassA 可供外部访问的静态函数 F
    objB.F();           //我是 ClassA 可供外部访问的静态函数 F,被 ClassB 修改鸟。



    参考文章:

    http://www.w3school.com.cn/js/pro_js_object_defining.asp

  • 相关阅读:
    牛客网 剑指Offer JZ16 合并两个排序的链表
    牛客网 剑指Offer JZ15 反转链表
    牛客网 剑指Offer JZ14 链表中倒数最后k个结点
    牛客网 剑指Offer JZ12 数值的整数次方 经典快速幂
    牛客网 剑指offer-JZ10 矩形覆盖
    牛客网 剑指offer-JZ9 跳台阶扩展问题
    牛客网 剑指offer-JZ8 跳台阶
    牛客网 剑指offer-JZ7 斐波那契数列
    牛客网 剑指offer-JZ6 旋转数组的最小数字
    codility_ BinaryGap
  • 原文地址:https://www.cnblogs.com/leftfist/p/4258025.html
Copyright © 2011-2022 走看看