默认使用一个键的对象(getter / setter)

时间:2015-06-29 19:04:08

标签: javascript ecmascript-6

我知道所有新的ECMAScript6东西,我们正在发生一些令人惊奇的事情。我的目标是做这样的事情,我不知道它是否可能:

var angEl = {
  get(): blah,
  scope: this.scope(),
  injector: this.injector()
}

现在我这样做:

var angEl = blah;
var angElProps = {
  scope: angEl.scope(),
  injector: angEl.injector()
}

只是想知道是否有任何很酷的新方式来实现这一目标。

2 个答案:

答案 0 :(得分:1)

我正在读两件事,你想要分配价值和方法。

在ES5中执行此操作的最佳方法是将此值放在构造函数中,该函数将在运行新的MyObject(值)时运行。然后将方法分配给原型。如果将方法放在构造函数中,则可能会导致同一函数一次又一次地创建出现问题。

ES5

var MyObject = function(value){
    this.value = value;
}

MyObject.prototype.func = function(){};

如果您不打算利用手动编辑对象原型并只想要类似类的对象,ES6的语法更清晰。

ES6

class MyObject{
 constructor(value){
   this.value = value;
 }
 func(){}
}

编辑:此外,ES6已内置并设置。

class MyObject{


     func(){}
     set value(value){
         this._value = value;
     }
     get value(){
         return this._value;
     }

}

答案 1 :(得分:0)

不完全是es6,但听起来你想使用像Object.defineProperty()或Object.defineProperties()这样的东西。 例如:

var angEl = {};
Object.defineProperties(angEl, {
  'scope': {
    get: function() {
      return this.scope;
    },
    set: function(val) {
      this.scope = val;
    },
    value: //set to something
  },
  'injector': {
    ...
  }
});

通过这种方式,您可以精确定义如何与对象进行内部交互,而无需额外的对象。