这是对elclanrs解决方案的扩展(打扰),包括实例方法的详细信息,并且对问题的这一方面采取了可扩展的方法。我完全承认,这要归功于David Flanagan的“ JavaScript:权威指南”(对此情况进行了部分调整)。请注意,这显然比其他解决方案更冗长,但从长远来看可能会受益。
首先,我们使用David的简单“扩展”功能,该功能将属性复制到指定的对象:
function extend(o,p) {
for (var prop in p) {
o[prop] = p[prop];
}
return o;
}
然后我们实现他的Subclass定义实用程序:
function defineSubclass(superclass, // Constructor of our superclass
constructor, // Constructor of our new subclass
methods, // Instance methods
statics) {
constructor.prototype = Object.create(superclass.prototype);
constructor.prototype.constructor = constructor;
if (methods) extend(constructor.prototype, methods);
if (statics) extend(constructor, statics);
return constructor;
}
在最后的准备工作中,我们使用David的新拼图游戏来增强Function原型:
Function.prototype.extend = function(constructor, methods, statics) {
return defineSubclass(this, constructor, methods, statics);
};
定义Monster类后,我们执行以下操作(可将其用于我们要扩展/继承的任何新类):
var Monkey = Monster.extend(
function Monkey() {
this.bananaCount = 5;
Monster.apply(this, arguments);
},
{
eatBanana: function () {
this.bananaCount--;
this.health++;
this.growl();
}
}
);