Я плохо знаком с prototypal наследованием, таким образом, я пытаюсь понять 'правильный' путь. Я думал, что мог сделать это:
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, чтобы быть реализацией того что и затем инстанцировать объектов от него.
Где я иду не так, как надо?
Проблема в том, что 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