Estoy tratando de usar la herencia, pero estoy atascado. Recibo un error y no sé qué estoy haciendo mal. Todos los ejemplos que veo en línea no pasan objetos a sus constructores, por lo que no estoy seguro de lo que debería estar haciendo. Aquí hay un ejemplo tonto:

function Automobile(obj){
    this.name = obj.name;
    this.model = obj.model;
}

Automobile.prototype = {
    getName: function(){
        console.log(this.name);
    },
    getModel: function(){
        console.log(this.model);
    }
}

var bmw = new Automobile({
    name: 'BMW',
    model: 'm5'
})

bmw.getName();
bmw.getModel();


function Truck(obj){
    this.cabSize = obj.cabSize
}

Truck.prototype = new Automobile();
Truck.prototype = {
    getCabSize: function(){
        console.log(this.cabSize);
    }
}

var fordF150 = new Truck({
    name: 'Ford',
    model: 'F150'
})

//Uncaught TypeError: Cannot read property 'name' of undefined test.js:2
//Automobile test.js:2
//(anonymous function)
2
Ben 29 ago. 2014 a las 03:07

2 respuestas

La mejor respuesta

El error ocurre en Truck.prototype = new Automobile();. No está pasando obj, que Automobile espera.

Para evitar esto intente Truck.prototype = Object.create(Automobile.prototype)

Después de ese uso

Truck.prototype.getCabSite = function(){
}

Para no sobrescribir las propiedades heredadas de Automobile.

3
nisargjhaveri 28 ago. 2014 a las 23:17

En lugar de esto:

Truck.prototype = {
    getCabSize: function(){
        console.log(this.cabSize);
    }
}

Prueba esto:

Truck.prototype.getCabSite = function(){


}

Truck.prototype.constructor = Truck; //this will insure the appropriate constructor is called

De esa manera no eliminas deshacerte del prototipo del automóvil

0
onzur 28 ago. 2014 a las 23:22