我有一段工作代码,直到我添加了最后一个属性。我在javascript中知道这个问题。但这是我以前从未遇到的事情。
var name = "John Dane";
var age = 24;
var person = {
id: 'emp133y1998',
name, age,
forEach: function(action) {
for (var prop in this) {
if(prop === 'forEach') continue;
action(this[prop]);
}
},
this: name +" "+ age
};
person.forEach(e => say(e));
如果this
是关键字,我们如何将其用作属性名称。更奇怪的是我实际上可以像这样访问它person.this
。但不幸的是,我的forEach
方法在此之后破裂了。所以我删除了它。我还在学习阶段。谁能解释一下这里到底发生了什么?
答案 0 :(得分:2)
this
是保留关键字as of ECMAScript 2015规范。
该语言允许您使用括号语法声明带有保留关键字的属性名称,如@squint所提及的那样。
注意:ES5以前不支持裸设使用保留字。
对浏览器环境有效的示例:
// this code works on before ES5 and onward
// this bracket syntax for maximum portability of your code
var obj = {};
obj['this'] = 'hello i am this'; // bracket syntax
obj['for'] = 'hello i am for';
alert(obj['this']);
alert(obj['for']);

// this code works on ES5 and onward
var obj = {};
obj.this = 'hello i am this'; // bracket syntax
obj.for = 'hello i am for';
alert(obj.this);
alert(obj.for);

IMO:我建议不要使用this
或其他保留关键字作为属性的名称,否则可能会造成字幕错误,并且可能会让人混淆并构建工具。