Наследование прототипа: можете ли вы связать 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 в качестве стандартного "интерфейса", BicData - реализацию этого, а затем создавать экземпляры объектов из него.
Куда я иду не так?
1 ответ
Решение
Проблема в том, что tbase.BicData
это объект (tbase.BicData = Object.create(tData);
) и prototype
свойство должно использоваться в функциях конструктора.
Воспользовавшись Object.create
метод, я бы сделал что-то вроде этого:
var tbase = {};
tbase.Tdata = {
say : function (data) {
console.log(data);
}
};
tbase.BicData = Object.create(tbase.Tdata);
tbase.BicData.say = function (data) {
console.log("overridden: " + data)
};
tbase.BicData.shout = function (data, temp) {
console.log("SHOUT: " + data + ", " + temp)
};
var test = Object.create(tbase.BicData);
var tData = Object.create(tbase.Tdata);
tData.say("test1"); // test1
test.say("test2"); // overridden: test2
test.shout("test3", "hope"); // SHOUT: test3, hope