WEB开发网
开发学院网页设计JavaScript javascript面向对象之我解 阅读

javascript面向对象之我解

 2010-09-14 13:32:52 来源:WEB开发网   
核心提示: 2、如果需要通过prototype定义方法和属性,则prototype的定义必须在Extends方法调用之后,javascript面向对象之我解(6),否则所有的定义将会被Extends方法忽略掉,当然,你可以不使用prototype的方式覆写,而使用内联的方式覆写,对原Extends方法

2、如果需要通过prototype定义方法和属性,则prototype的定义必须在Extends方法调用之后,否则所有的定义将会被Extends方法忽略掉。当然,对原Extends方法稍加改进,就可以消除这个缺点;

2、最主要的一点,虽然通过几个复杂的操作,子类仍然直接保留了父类的prototype。因此,如果基类的另一个子类(假设有的话,但既然使用了继承,一般会有另一个子类)如果使用prototype修改了基类的方法(既然是继承,子类覆写方法的需求是自然而常见的),会同时影响到所有的子类,这实际上意味着子类不能覆写父类的方法。当然,你可以不使用prototype的方式覆写,而使用内联的方式覆写,这时候prototype就不是什么大问题了。

第二种实现摘自《JavaScript类的继承》

//为Object类添加静态方法:extend

Object.extend = function(destination, source) {
 for(property in source) {
   destination[property] = source[property];
 }
 return destination;
}
//通过Object类为每个对象添加方法extend
Object.prototype.extend = function(object) {
 return Object.extend.apply(this, [this, object]);
}
//定义class1
function class1(){
   //构造函数
}
//定义类class1的成员
class1.prototype={
   method:function(){
      alert("class1");
   },
   method2:function(){
      alert("method2");
   }
}
//定义class2
function class2(){
   //构造函数
}
//让class2继承于class1并定义新成员
class2.prototype=(new class1()).extend({
   method:function(){
      alert("class2");
   }
});
//创建两个实例
var obj1=new class1();
var obj2=new class2();
//试验obj1和obj2的方法
obj1.method();
obj2.method();
obj1.method2();
obj2.method2();

上一页  1 2 3 4 5 6 7 8  下一页

Tags:javascript 面向 对象

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接