2014-12-12 3 views
0

Я новичок в JavaScript Я пытаюсь выполнить упражнение, в котором у меня есть объект, вложенный внутри какого-либо объекта, и я использую наследование, чтобы объединить их все вместе. Проще говоря, основная цель состоит в том, чтобы быть в состоянии выполнить эту строку кода:Dynamicish Inheritance

Vehicle1 = new Vehicle("Car"); 
Print(Vehicle.Car("Toyota").Toyota("Red").printEverythingInherited()); //should print Car, Toyota, Red 

Vehicle2 = new Vehicle("Car"); 
Print(Vehicle.Car("Honda").Toyota("Blue").printEverythingInherited()); //should print Car, Honda, Blue 

Я уверен, если этот тип кода можно выполнить, я faily новичок в JavaScript. Ниже приводится моя реализация, и мне хотелось бы получить некоторые отзывы о том, как двигаться вперед.

Кроме того, я хотел бы отметить, что я хочу, чтобы избежать создания

Car = new Toyota("Blue") 

Мне нужно создать его как:

Car = Vehicle("Car").Car("Toyota").Toyota("Blue") 

function Vehicle(type) { 
 
    this.Vehicle = type 
 
} 
 

 
Vehicle.prototype.Car = Car 
 

 
function Car(brand) { 
 
    //Vehicle.call(this, "g") 
 
    this.brand = brand 
 
} 
 

 
Car.prototype.Toyota = Toyota 
 
Car.prototype.Honda = Honda 
 

 
function Honda(color) { 
 
    this.color = color 
 

 
    function printEverythingInherited() { 
 
    print(this.Vehicle + this.brand + this.color) should print Car, Honda, Red 
 
    } 
 
} 
 

 
function Toyota(color) { 
 
    this.color = color 
 
    this.getPriviledgedFunctionColor = function() { 
 
    Log.Message("Toyota() " + this.color) 
 
    } 
 
} 
 

 

 
Vehicle = new Vehicle("Car"); 
 
Print(Vehicle.Car("Toyota").Toyota("Red").printEverythingInherited());

+1

Почему у вашей Honda есть метод «.Toyota»? – Bergi

ответ

0

Что вы на самом деле ищут не наследование, а builder pattern. Которые вы могли бы объединить с factory pattern, если вам действительно нужны разные классы.

function Factory(props, vals) { 
    if (!vals) vals = []; 
    this.create = function() { 
     return vals.reduce(function(instance, val, i) { 
      instance[props[i]] = val; 
      return instance; 
     }, {}); 
    }; 
    props.forEach(function(prop, i) { 
     this[prop] = function(val) { 
      var nvals = vals.slice(); 
      nvals[i] = val; 
      return new Factory(props, nvals); 
     }; 
    }, this); 
} 
var Vehicle = new Factory(["type", "brand", "color"]); 
var Car = Vehicle.type("car"); 

var car1 = Car.brand("toyota").color("red").create(); 
var car2 = Car.brand("honda").color("blue").create();