私はjavascriptのnoob(せいぜい)です。次のコードは正常に動作するようです。任意のアイデアをどのように同じ "初期化子"のアプローチを維持し、__proto__
を使用せずに動作させ、コンストラクタ関数にすべてを変換せずに?廃止された__proto__の代替手段
var Employee =
{
paygrade: 1,
name: "",
dept: "general",
init: function()
{
return this;
},
salary: function()
{
return this.paygrade * 30000;
}
};
var WorkerBee =
{
paygrade: 2,
projects: ["Project1", "Project2"],
init: function()
{
this.__proto__ = Inherit_Employee; // Inherit My Employee "Pseudo Prototype"
return this;
}
};
var SalesPerson =
{
dept: "Sales",
quota: 100,
init: function()
{
this.__proto__ = Inherit_WorkerBee; // Inherit My WorkerBee "Pseudo Prototype"
return this;
}
};
var Engineer =
{
dept: "Engineering",
machine: "im the start machine",
init: function()
{
this.__proto__ = Inherit_WorkerBee; // Inherit My WorkerBee "Pseudo Prototype"
return this;
}
};
var Inherit_Employee = Object.create(Employee).init(); // Create My Employee Pseudo-Prototype
var Inherit_WorkerBee = Object.create(WorkerBee).init(); // Create My WorkerBee Pseudo-Prototype
var jane = Object.create(Engineer).init();
var jill = Object.create(Engineer).init();
私には1つのアプローチがありますが、もっと効率的なアプローチがあるのでしょうか?今のところ、私がやったことは、__proto__
という行を、このような自分自身の継承関数の呼び出しで置き換えることです。
init: function()
{
inherit(this, WorkerBee); // Inherit WorkerBee
return this;
}
そして、この私の継承である()関数
function inherit(childObject, parentObject)
{
// childObject inherits all of parentObjects properties
//
for (var attrname in parentObject)
if (childObject[attrname] == undefined)
childObject[attrname] = parentObject[attrname];
// childObject runs parentObject 'init' function on itself
//
for (var attrname in parentObject)
if (typeof parentObject[attrname] == "function")
if (attrname == 'init')
parentObject[attrname].call(childObject);
}
これを知っていることはまだ良いことだので、多分、ES6になりますあなたを助けるかもしれない:http://www.webdeveasy.com/javascript-prototype/ – Naor