日期:2014-05-16  浏览次数:20349 次

麻烦大家帮忙解释一下这段继承程序
//定义extend方法
Object.extend   =   function(destination,source)         //(1)-的我理解是destination为子类,source为基类
{
for(property   in   source)
{
destination[property]   =   source[property];
}

return   destination;
}

Object.prototype.extend   =   function(object)       //(2)-object参数应该是表示的是基类的引用
{
return   Object.extend.apply(this,[this,object]);
}

//定义class1
function   class1()
{
//构造函数
}
//
class1.prototype={
method:function()
{
alert( "class1 ");
},
method2:function()
{
alert( "method2 ");
}
}

function   class2()
{
//构造函数
}
class2.prototype=(new   class1()).extend({
method:function()
{
alert( "class2 ");
}
});         //(3)-这个地方我就不明白了:extend这里怎么会是一个函数呢?应该是基类啊,麻烦大家帮忙解释一下。谢谢

//创建两个实例
var   obj1   =   new   class1();
var   obj2   =   new   class2();

obj1.method();
obj2.method();
obj1.method2();
obj2.method2();


如果我的理解有问题麻烦大家指出是哪个环节有问题,我标注了1,2,3

------解决方案--------------------
//定义extend方法
/**
*这里定义的是Object静态方法,在使用时直接调用Object.extend(obj1, obj2)
*/
Object.extend = function(destination,source) //(1)-的我理解是destination为子类,source为基类
{
for(property in source)
{
destination[property] = source[property];
}

return destination;
}

/**
*这里定义的是实例方法,需new Class().extend(obj2)
*/
Object.prototype.extend = function(object) //(2)-object参数应该是表示的是基类的引用
{
return Object.extend.apply(this,[this,object]);
}

//定义class1
function class1()
{
//构造函数
}
//
class1.prototype={
method:function()
{
alert( "class1 ");
},
method2:function()
{
alert( "method2 ");
}
}

function class2()
{
//构造函数
}
class2.prototype=(new class1()).extend({
method:function()
{
alert( "class2 ");
}
}); //(3)-这个地方我就不明白了:extend这里怎么会是一个函数呢?应该是基类啊,麻烦大家帮

/**
*extend参数都是对象,上面定义的是个json对象,当能Class也是对象,他是Function的实例,而Function优势Object的实例
*/
------解决方案--------------------
function class2()
{
//构造函数
}
class2.prototype=(new class1()).extend({
method:function()
{
alert( "class2 ");
}
});

上面一句话等于
var cls1 = new class1();
cls1.prototype.method = function() { alert( "class2 "); };
Object.extend(class2.prototype, cls1);