一、對象作用域
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 修改鳥。