初めて対象に接触したjavascript

3108 ワード

一、対象のスコープ
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_jsobjectdefining.asp