Reputation: 145
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
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
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
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