SLy_huh
SLy_huh

Reputation: 145

JS Object Properties Definition shorthand

So, i wondered, if there is a way to do something like this:

var bar = function(){
    this = {
        name: 'baz',
        action: function(){
            alert('bark');
        }
    };
}
var foo = new bar();
console.log(foo.name);
foo.action();

Target: get a shorthand solution for code like this.name = 'baz'; this.action = ...; this.etc =, but, define it like a class, kinda, so i don't need declare default properties further.

Upvotes: 1

Views: 56

Answers (3)

Nenad Vracar
Nenad Vracar

Reputation: 122037

You could use Object.assign() on this to add default values.

var bar = function() {
  Object.assign(this, {
    name: 'baz',
    action: function() {
      alert('bark');
    }
  })
}
var foo = new bar();
console.log(foo.name);
foo.action();

Upvotes: 1

zzzzBov
zzzzBov

Reputation: 179046

Modern browsers have Object.assign:

var bar = function () {
    Object.assign(this, {
        name: 'baz',
        action: function(){
            alert('bark');
        }
    });
};
var foo = new bar();
console.log(foo.name);
foo.action();

If you don't have Object.assign available, you can create your own assign (or extend, or merge...) function:

function assign(obj) {
    var objects;

    objects = Array.prototype.slice.call(arguments, 1);

    objects.forEach(function (object) {
        var i;
        for (i in object) {
            if (Object.prototype.hasOwnProperty.call(object, i)) {
                obj[i] = object[i];
            }
        }
    });

    return obj;
}

Upvotes: 1

Vladu Ionut
Vladu Ionut

Reputation: 8193

    Object.prototype.extend = function(obj) {
      for (var i in obj) {
        if (obj.hasOwnProperty(i)) {
          this[i] = obj[i];
        }
      }
    };
    var bar = function() {
      this.extend({
        name: 'baz',
        action: function() {
          alert('bark');
        }
      });
    }
    var foo = new bar();
    console.log(foo.name);
    foo.action();

Upvotes: 0

Related Questions