一、对象作用域
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