javascript面向对象之我解
2010-09-14 13:32:52 来源:WEB开发网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();
Tags:javascript 面向 对象
编辑录入:爽爽 [复制链接] [打 印]更多精彩
赞助商链接