• 初次接触面向对象的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

  • 相关阅读:
    简单聚合查询
    简单搜索入门
    简单的document操作
    快速检测集群的健康状况
    Log4j和Slf4j的比较
    javascript中escape()、unescape()、encodeURI()、encodeURIComponent()、decodeURI()、decodeURIComponent()比较
    Spring-data-jpa详解,全方位介绍。
    JSON关联属性转换异常
    原生类型 和 参数化类型
    Spring Data JPA
  • 原文地址:https://www.cnblogs.com/leftfist/p/4258025.html
Copyright © 2020-2023  润新知