2015-03-23 3 views
0

Я не совсем уверен, как это объяснить словами, так вот несколько примеров кода, чтобы показать, что я пытаюсь достичь:JavaScript этот вопрос с родительскими и дочерними классами/объектами

function carFactory(){ 
    this.wheelsPerCar = 4; 

    this.car = function() { 
     this.wheels = []; 
     this.addWheels = function(){ 
      for(var i = 0; i < this.wheelsPerCar; i++){ 
       var wheel = new this.wheel(); 
       this.wheels.push(wheel); 
      } 
     }; 

     this.wheel = function(){ 
     }; 
    }; 
}; 

var cf = new carFactory(); 
var myCar = new cf.car(); 
myCar.addWheels(); 

Когда я print myCar.wheels Я возвращаю пустой массив. Я думаю, это потому, что this.wheelsPerCar выходит за рамки. Я думаю, что, скорее всего, это совершенно неправильно, потому что я не очень много работаю с классами и объектами JavaScript.

ответ

3

Вы вроде правы. wheelsPerCar не находится на автомобиле, он находится на заводе.

Вы можете просто изменить this.wheelsPerCar = 4; быть var wheelsPerCar = 4; затем просто использовать wheelsPerCar без this, и он будет находиться в области видимости.

+0

Было бы также лучше передать значение, иначе все автомобили будут иметь 4 колеса. ;-) – RobG

+0

Это правда. Но это звучит грязно. Я думаю, что в этот момент вам понадобится прототипное наследование –

0

Экземпляр carFactory и пример car не имеют отношения родитель-потомок. Они определены вместе, но там нет наследования классов.

Вы можете выставить wheelsPerCar свойство внутренней car например 2-мя способами:

  1. Передайте экземпляр carFactory функции car конструктора.
  2. Задайте переменную var wheelsPerCar = this.wheelsPerCar в области car, чтобы она могла получить к ней доступ без this.
0
this.addWheels = function(){ 
    debugger; 
    for(var i = 0; i < this.wheelsPerCar; i++){ 
     var wheel = new this.wheel(); 
     this.wheels.push(wheel); 
    } 
}; 

this.wheelsPerCar не определено, 0 < не определено, оценивают как ложное. Сначала вы хотите прочитать это Scope and this in JavaScript. Кроме того, вы должны иметь возможность отлаживать это с помощью любого браузера.

Смежные вопросы