您的位置:首页 > Web前端 > JavaScript

初次接触面向对象的javascript

2013-01-23 16:05 441 查看
一、对象作用域

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: