Сообщение от monolithed
|
По мне, просто игра слов не более. Или мне одному так кажется?
PS: Parasitic inheritance
|
А всё таки это интересно
Вот небольшой пример - очень некрасивой реализации ООП.
function Transport(config){
var config = config || {};
this.type = "Транспорт";
this.wheel = 0;
this.maxVelocity = 0;
this.velocity=0;
this.deltaVelocity=0;
for(var p in config){
this[p]=config[p];
}
}
Transport.prototype = {
engine: 'никакой',
isDrive:false,
faster:function(){
if(this.isDrive){
if(this.velocity<this.maxVelocity){
this.velocity+=this.deltaVelocity;
}
else{
console.log(this.type+" быстрее ехать не может");
}
}
else{
console.log("Необходимо завести машину");
}
},
slower:function(){
if(this.velocity>0){
this.velocity-=this.deltaVelocity;
}
else{
console.log("Медленее ехать нельзя");
}
},
drive:function(insideInvoke){
var me = this;
if(!insideInvoke && me.isDrive){
return;
}
if(!insideInvoke){
console.log(me.type+" заведена");
me.isDrive = true;
}
if(me.isDrive){
console.log('Едит '+me.type+' на '+me.wheel+' колесах. Скорость '+me.velocity+'...');
setTimeout(function(){
me.drive(true);
},1000);
}
},
stop:function(){
this.isDrive = false;
}
};
//var t = new Transport();
//t.drive();
function Car(config){
var config = config || {};
this.type = "Машина";
this.wheel = 4;
this.maxVelocity = 60;
for(var p in config){
this[p]=config[p];
}
Car.superclass.constructor.call(this);
}
Car.prototype = new Transport();
Car.superclass = Transport.prototype;
Car.prototype.deltaVelocity=10;
//var c = new Car();
function SuperCar(config){
var config = config || {};
this.type = "СуперМашина";
this.wheel = 4;
this.maxVelocity = 100;
for(var p in config){
this[p]=config[p];
}
Car.superclass.constructor.call(this);
}
SuperCar.prototype = new Car();
SuperCar.superclass = Car.prototype;
SuperCar.prototype.deltaVelocity=20;
var sc = new SuperCar();
Если не лень. Скопируйте и запустите.
Поуправляйте Супер Машиной в консоле
через
sc.drive();
sc.faster();
sc.slower();
А потом, просто для себя попробуйте реализовать
функцию extend - без подсказок из интернета(на собеседовании же не будет возможности пользоваться инетом).
для вот такого наследования
Заметка - вообще полностью весь код надо придумать самому.
Поэтому это итак очень большая подсказка.
У Вас есть три объекта A,B,C
B наследует A, ну а C наследует B.
C = extend(B,{
constructor: function(config){
applyIf(config,{
h:6
});
B.superclass.constructor.call(this, config);
},
b:4,
c:5
});
function applyIf(o, c){
if(o){
for(var p in c){
if(!isDefined(o[p])){
o[p] = c[p];
}
}
}
return o;
}
function isDefined(v){
return typeof v !== 'undefined';
}
В итоге при вызове
console.log(new C({b:8,h:5}));
Должен получиться объект
{
b:8,
h:5,
c:5
}
Не надо меня спрашивать подробности, это я так набросал.
Пример и реализацию на собеседовании Вам нужно сделать самому.
Сразу скажу, что я не сделал это.