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

  • 相关阅读:
    监控里的主码流和子码流是什么意思
    监控硬盘容量计算
    一个能让你了解所有函数调用顺序的Android库
    电工选线
    oracle linux dtrace
    list all of the Oracle 12c hidden undocumented parameters
    Oracle Extended Tracing
    window 驱动开发
    win7 x64 dtrace
    How to Use Dtrace Tracing Ruby Executing
  • 原文地址:https://www.cnblogs.com/leftfist/p/4258025.html
Copyright © 2011-2022 走看看