Я новичок в прототипном наследовании, поэтому я пытаюсь понять «правильный» способ. Я думал, что я мог бы сделать это:Prototypal inheritance: Можете ли вы создать Object.create?
if (typeof Object.create !== 'function') {
Object.create = function (o) {
function F() {}
F.prototype = o;
return new F();
};
}
var tbase = {};
tbase.Tdata = function Tdata() {};
tbase.Tdata.prototype.say = function (data) {
console.log(data);
};
var tData = new tbase.Tdata();
tbase.BicData = Object.create(tData);
tbase.BicData.prototype.say = function (data) {
console.log("overridden: " + data)
};
tbase.BicData.prototype.shout = function (data, temp) {
console.log("SHOUT: " + data + ", " + temp)
};
var test = new tbase.BicData();
tData.say("test1");
test.say("test2");
test.shout("test3", "hope");
if (typeof Object.create !== 'function') {
Object.create = function (o) {
function F() {}
F.prototype = o;
return new F();
};
}
var tbase = {};
tbase.Tdata = function Tdata() {};
tbase.Tdata.prototype.say = function (data) {
console.log(data);
};
var tData = new tbase.Tdata();
tbase.BicData = Object.create(tData);
tbase.BicData.prototype.say = function (data) {
console.log("overridden: " + data)
};
tbase.BicData.prototype.shout = function (data, temp) {
console.log("SHOUT: " + data + ", " + temp)
};
var test = new tbase.BicData();
tData.say("test1");
test.say("test2");
test.shout("test3", "hope");
Но вместо этого я получаю «tbase.BicData.prototype неопределен»
В Java говорят, что я хочу, чтобы иметь TDATA как шаблонного " interface ', BicData быть реализацией этого, а затем создавать объекты из него.
Куда я иду не так?
+1 Я удалил свой ответ, вы правы :) – mck89
Это выглядит хорошо! Спасибо :) – robinhowlett
Я думаю, что большую часть путаницы OP можно было бы избежать, если бы OP не смешивал 'new' и' Object.create'. Я говорю, выберите один и придерживайтесь его. –