JavaScriptオブジェクトには、継承を容易にするための「プロトタイプ」メンバーがあります。しかし、それがなくても完全にうまく生きることができるようで、それを使用することの利点は何であるかと思いました。私は賛否両論は何であるか疑問に思いました。
たとえば、次のことを考慮してください(ここではjsfiddle)。
function Base (name) {
this.name = name;
this.modules = [];
return this;
}
Base.prototype =
{
initModule: function() {
// init on all the modules.
for (var i = 0; i < this.modules.length; i++)
this.modules[i].initModule();
console.log("base initModule");
}
};
function Derived(name) {
Base.call(this,name); // call base constructor with Derived context
}
Derived.prototype = Object.create(Base.prototype);
Derived.prototype.initModule = function () {
console.log("d init module");
// calling base class functionality
Base.prototype.initModule.call(this);
}
var derived = new Derived("dname");
console.log(derived.name);
derived.initModule();
問題は、なぜ「プロトタイプ」を使用するのかということです。私たちはまた、次のようなことをすることができますDerived = Object.create(Base);
例(jsfiddle):
Base =
{
initModule: function() {
// init on all the modules.
for (var i = 0; i < this.modules.length; i++)
this.modules[i].initModule();
console.log("base initModule",this.name);
},
init: function(name) {
this.name = name;
this.modules = [];
}
};
Derived = Object.create(Base);
Derived.initModule = function () {
console.log("d init module");
// calling base class functionality
Base.initModule.call(this);
}
Derived.init("dname");
console.log(Derived.name);
Derived.initModule();