JS对象属性定义简写

时间:2016-12-29 14:14:00

标签: javascript object properties

所以,我想知道,如果有办法做这样的事情:



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 =这样的代码的速记解决方案,但是,将其定义为类,有点,所以我不需要进一步声明默认属性。

3 个答案:

答案 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(或extendmerge ...)功能:

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();