1

我有两个文件:BaseClass.js 和 DerivedClass.js。内容如下

//---------------------BaseClass.js----------------------------

(function () {
    BaseClass= function() { };
    BaseClass.prototype.getTestVar = function() {
    return 'base test variable';
    };
})();


//----------------DerivedClass.js----------------------------

(function () {
    DerivedClass= function() { };
    DerivedClass.inherits(BaseClass);
    DerivedClass.prototype = new BaseClass();
    DerivedClass.prototype = {
        newvar : 'derived func variable ',
        getNewVar : function() { return this.newvar; }
    };
})();

在我的 html 文件“test.html”中,我有以下内容

var dc = new DerivedClass();
alert(
    'The value in newvar of derived class ' + dc.getNewVar() + 
    ' base class variable ' + dc.getTestVar()
);

我收到 dc.getTestVar() 不是函数的 Javascript 错误。非常感谢解决此问题的任何帮助。

4

2 回答 2

2

看看这几行:

DerivedClass.prototype = new BaseClass();
DerivedClass.prototype = {
    newvar : 'derived func variable ',
    getNewVar : function() { return this.newvar; }
};

首先它分配一个新BaseClass的作为原型,然后下一行用一个新的对象覆盖该原型。也许您需要单独分配DerivedClass.prototype.newvar和分配DerivedClass.prototype.getNewVar- 假设它符合您使用的任何提供该inherits方法的经典继承库。

那是,

DerivedClass.prototype = new BaseClass();
DerivedClass.prototype.newvar = 'derived func variable';
DerivedClass.prototype.getNewVar = function() { return this.newvar; }

尽管如此,这似乎是经典继承和原型继承的混合体。考虑阅读该经典继承库的文档,看看是否有更一致的方式来做这种事情。

例如,如果您使用Crockford 的经典继承(从inherits关键字猜测),这似乎是他声明方法的预期方式:

DerivedClass.method('getNewVar', function () { return this.newvar });

诚然,这完全等同于您已经在做的事情,但是,如果我们要使用他的库,不妨使用他的风格来保持一致性。

于 2012-07-22T02:41:19.023 回答
2

在此刻:

DerivedClass.prototype = new BaseClass();
DerivedClass.prototype = {
    newvar : 'derived func variable ',
    getNewVar : function() { return this.newvar; }
};

您首先将原型设置为BaseClass,然后用新对象覆盖它。试试这个:

DerivedClass.prototype = new BaseClass();
DerivedClass.prototype.newvar = 'derived func variable ';
DerivedClass.prototype.getNewVar = function() { return this.newvar; };
于 2012-07-22T02:41:49.527 回答