所以,我想知道,如果有办法做这样的事情:
var bar = function(){
this = {
name: 'baz',
action: function(){
alert('bark');
}
};
}
var foo = new bar();
console.log(foo.name);
foo.action();

目标:获取像this.name = 'baz'; this.action = ...; this.etc =
这样的代码的速记解决方案,但是,将其定义为类,有点,所以我不需要进一步声明默认属性。
答案 0 :(得分:1)
现代浏览器有Object.assign
:
var bar = function () {
Object.assign(this, {
name: 'baz',
action: function(){
alert('bark');
}
});
};
var foo = new bar();
console.log(foo.name);
foo.action();

如果您没有Object.assign
可用,则可以创建自己的assign
(或extend
或merge
...)功能:
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;
}
答案 1 :(得分:1)
您可以使用Object.assign()
上的this
添加默认值。
var bar = function() {
Object.assign(this, {
name: 'baz',
action: function() {
alert('bark');
}
})
}
var foo = new bar();
console.log(foo.name);
foo.action();

答案 2 :(得分:0)
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();