2015-12-23 31 views
0

我有一个“类”中定义:提取数据以JavaScript

function Car(door, engine) { 
    this.door = door; 
    this.engine = engine; 

    function setDoor(door) { 
     this.door = door; 
    } 
    function getDoor(door) { 
     return door; 
    } 
    function setEngine(engine) { 
     return engine; 
    } 
    function getEngine() { 
     return engine; 
    } 
} 

我想从在javascript对象中提取数据,在同一个文件我有另一个“类”和功能来加。

function bodyCar(car) { 
    newCar = new Array(); 
    function addCar(car) { 
     newCar = car.door; 
     newCar = car.engine; 
     return "The new car have " + car.door + " doors. engine " + car.engine; 
    } 
} 

调用的类和函数:

var myCar = new bodyCar(); 
myCar.addCar(new Car(5,"2200cc")); 
document.write(myCar); 

但它不为我工作。它给出了一个类型错误“myCar.addCar不是一个函数”。

感谢您的帮助。

+0

你确定你的构造函数中的私有方法的上下文将是构造函数的上下文吗? –

+0

addCar不是bodyCar的属性... – epascarello

+0

您声明'newCar = new Array()',但是您将'car.door'和'car.engine'分配给'addCar'中的数组? – Marc

回答

2

这不是你如何在类风格的Javascript中定义方法。您在构造函数中定义的函数仅在调用构造函数期间存在。

如果要添加“实例方法”的“类”,你必须把它们的构造函数的原型对象:

function Car(door, engine) { 
    this.door = door; 
    this.engine = engine; 
} 

Car.prototype.setDoor = function(door) { 
    this.door = door; 
} 

Car.prototype.getDoor = function() { 
    return this.door; 
} 

Car.prototype.setEngine = function(engine) { 
    this.engine = engine; 
} 

Car.prototype.getEngine = function() { 
    return this.engine; 
} 

这就是说,你在第二类逻辑(创建和然后扔掉阵列)对我来说没有意义;我不确定你的实际目标是什么。但希望上述有助于让你更接近。

2

如果你想创建OOP风格类的方法,那么你有一些选择:

创建类的功能特性

function bodyCar(car) { 
    newCar = new Array(); 
    this.addCar = function(car) { 
    // do addCar method stuff here 
    } 
} 

,或者如果你想使用原型方法方法(更好的内存管理)

function bodyCar(car) { 
    newCar = new Array(); 
} 

bodyCar.prototype.addCar = function(car) { 
    // do addCar method stuff here 
} 

同样,相同的方法应该是使用你的基地车类中的方法,如setDoorgetDoor

此外,如果你想OOP风格的“传承”,你应该选择的原型方法,并使用Object.create()

祝你好运!

+0

我只是意识到你的逻辑在这里没有任何实际意义,因为你正在创建'newCar'数组,然后将该变量设置为门,然后再将其设置为引擎....无论哪种方式,这里提到的方法就是你要做的 –