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