









1)利用共享prototype原型对象实现继承.
继承是面向对象开发的一个重要概念.在JavaScript中没有专门的机制来实现类的继承,但可以通过拷贝一个类的prototype到另外一个类实现继承.一种简单的继承实现如下:
fucntion class1(){
//构造函数
}function class2(){
//构造函数
}
class2.prototype=class1.prototype;
class2.prototype.moreProperty1="xxx";
class2.prototype.moreMethod1=function(){
//方法实现代码
}
var obj=new class2();
obj instanceof class1
obj instanceof class2
//定义class1
function class1(){
//构造函数
}
//定义class1的成员
class1.prototype={
m1:function(){
alert(1);
}
}//定义class2
function class2(){
//构造函数
}
//让class2继承于class1
class2.prototype=class1.prototype;
//给class2重复定义方法method
class2.prototype.method=function(){
alert(2);
}//创建两个类的实例
var obj1=new class1();
var obj2=new class2();
//分别调用两个对象的method方法
obj1.method();
obj2.method();
2)利用反射机制和prototype实现继承.
利用反射机制实现类的继承,思路如下:利用for(...in...)语句遍历出所有基类的prototype的成员,并将其赋值给子类的prototype对象,例如:
//class1
function class1(){
//构造函数
}
class1.prototype={
method:function(){
alert(1);
},
method2:function(){
alert("method2");
}
}//class2
function class2(){
//构造函数
}
//让class2继承于class1
for(var p in class1.prototype){ //遍历class1.prototype的属性和方法
if (class2.prototype[p] == null) //如果类class2中没有此属性或方法,则进行拷贝
class2.prototype[p]=class1.prototype[p];
}
//覆盖定义class1中的method方法
class2.prototype.method=function(){
alert(2);
}//创建两个类的实例
var obj1=new class1();
var obj2=new class2();
//分别调用obj1和obj2的method方法
obj1.method();
obj2.method();
//分别调用obj1和obj2的method2方法
obj1.method2();
obj2.method2();
Function.prototype.inherit = function(baseClass){
for (var p in baseClass.prototype){
if (this.prototype[p] == null){
this.prototype[p] = baseClass.prototype[p];
}
}
}
Object.extend方法很容易理解,它是Object类的一个静态方法(只能用"类名.方法名"的形式调用),用于将参数中source的所有属性都赋值到destination对象中,并返回destination对象.
而
//为Object类添加静态方法:extend
Object.extend = function(destination, source) {
for(property in source) {
if (destination[property] == null){
destination[property] = source[property];
}
}
return destination;
}//class1
function class1(){
//构造函数
}
class1.prototype={
age:"sss",
method:function(){
alert(1);
},
method2:function(){
alert("method2");
}
}
class1.show = function(){
alert("class1的静态方法");
}//class2
function class2(){
//构造函数
}//覆盖定义class1中的method方法
class2.prototype.method=function(){
alert(2);
}//Object.extend时,子类与父类必须一致.
Object.extend(class2.prototype,class1.prototype); //继承常规属性和方法
Object.extend(class2,class1); //继承静态属性和方法
//创建两个类的实例
var obj1=new class1();
var obj2=new class2();
//分别调用obj1和obj2的method方法
obj1.method();
obj2.method();
//分别调用obj1和obj2的method2方法
obj1.method2();
obj2.method2();
class2.show();
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。