Javascript 如何在JS中定义属性别名?

Javascript 如何在JS中定义属性别名?,javascript,node.js,ecmascript-6,Javascript,Node.js,Ecmascript 6,产出: let obj = {}; Object.defineProperty(obj, 'src', {get: () => 'hello'}); Object.defineProperty(obj, 'alias1', {get: () => this['src']}); Object.defineProperty(obj, 'alias2', {get: this['src']}); console.log(obj.src); console.log(obj.alias1);

产出:

let obj = {};
Object.defineProperty(obj, 'src', {get: () => 'hello'});
Object.defineProperty(obj, 'alias1', {get: () => this['src']});
Object.defineProperty(obj, 'alias2', {get: this['src']});
console.log(obj.src);
console.log(obj.alias1);
console.log(obj.alias2);
我做错了什么

hello
undefined
undefined
一定是

 this['src']
甚至

obj["src"]
由于arrow函数中的上下文是它在(
窗口中声明的上下文,在本例中为
)中声明的上下文,而不是它所属的对象。

不要绑定您所期望的
。在您的例子中,
引用全局对象。通过将第二行更改为:

this.obj["src"]
您需要将其更改为以下内容:

Object.defineProperty(obj, 'alias1', { get: () => { console.log(this) } });  // ==> Window

实例:
让obj={};
defineProperty(obj,'src',{get:()=>'hello'});
defineProperty(obj,'alias1',{get:()=>obj['src']});
defineProperty(obj,'alias2',{get:function(){returnthis.src}});
console.log(obj.src);
控制台日志(对象别名1);

控制台日志(对象别名2)
中的箭头函数不是您所认为的,请使用正则函数表达式。读取总是有帮助的。或的可能重复项。
Object.defineProperty(obj,'alias1',{get(){returnthis['src']})请记住,在V8中,.您忘记了
{get(){returnthis.src}}
,我认为这是最可读的选项。
Object.defineProperty(obj, 'alias1', { get: () => obj.src });
Object.defineProperty(obj, 'alias2', { get: function () { return this.src } });