javascriptinheritanceprototype-oriented

Javascript behaviour reuse: What side effects will this approach have?


I'm trying to understand pure prototype-based JavaScript and one specific thing I'm struggling with is reuse (inheritance).

For my project I landed this way of creating objects that can be reused.

// very generic prototype
var Apparatus = (function(){
    var self = Object.create({});
    self.state = false;
    self.on = function() { this.state = true; };
    return self;
})();

// more specific prototype
var Radio = (function(){
    var self = Object.create(Apparatus);
    self.frequency = 0;
    self.setFrequency = function(f) { this.frequency = f; }
    self.getFrequency = function() { return this.frequency; } 
    return self;
})();

I then want to "instantiate"/copy the Radio object, creating two different radios.

var kitchenRadio = Object.create(Radio);
kitchenRadio.state = false;
kitchenRadio.on();

var carRadio = Object.create(Radio);
carRadio.state = false;

console.log(kitchenRadio.state, carRadio.state);
// true false

This works, but will it continue to? Can anyone predict any unwanted outcomes?


Solution

  • Like @pimvdb said, remove state and this works well.

    // very generic prototype
    var Apparatus = (function(){
        var self = Object.create({});
        self.on = function() { this.state = true; };
        return self;
    })();
    
    // more specific prototype
    var Radio = (function(){
        var self = Object.create(Apparatus);
        self.setFrequency = function(f) { this.frequency = f; }
        self.getFrequency = function() { return this.frequency; } 
        return self;
    })();
    

    I then use Object.create(Object, params) to instantiate it.