使用'这个' ES6中的对象文字内部

时间:2015-11-21 22:43:56

标签: javascript node.js

我一直在做Node.js和前端Javascript,所以我应该知道答案。

假设我有一个像这样的对象文字:

       'lectal_api_server': {
            host: 'https://xyz.herokuapp.com',
            port:  process.env.PORT || 80,
            url:  'https://xyz.herokuapp.com:80'
        }

可以做这样的事情:

      'lectal_api_server': {
            host: 'https://xyz.herokuapp.com',
            port:  process.env.PORT || 80,
            url:   this.host + ':' + this.port
         }

我不相信ES5可以做到这样的事情但是ES6可以吗?

2 个答案:

答案 0 :(得分:9)

您可以使用方法或getter函数。两者都可以工作但是getter函数会使属性表现为属性而不是方法,这在某些情况下很有用。

// As a method

lectal_api_server = {
  host: 'https://lectal-api.herokuapp.com',
  port: 80,
  getUrl: function() {
    return this.host + ':' + this.port
  }
}

console.log('%c As a method', 'font-weight: bold');

console.log(lectal_api_server.getUrl());

for (var key in lectal_api_server) {
  console.log(key, ':', lectal_api_server[key]);
}

console.log(JSON.stringify(lectal_api_server));

// Using a getter

lectal_api_server = {
  host: 'https://lectal-api.herokuapp.com',
  port: 80,
  get url() {
    return this.host + ':' + this.port
  }
}

console.log('%c Using a getter', 'font-weight: bold');

console.log(lectal_api_server.url);

for (var key in lectal_api_server) {
  console.log(key, ':', lectal_api_server[key]);
}

console.log(JSON.stringify(lectal_api_server));

请参阅https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/get

答案 1 :(得分:2)

与您的方法不完全相同,但您可以使用函数作为构造函数来创建具有此行为的对象:

var LectalApiServer = function( host, port ){
    this.host = host;
    this.port = port;
    this.url = this.host + ":" + this.port;
};

var myLectalApiServer = new LectalApiServer( "http://...", 80);
console.log(myLectalApiServer.url);