我一直在做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可以吗?
答案 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);