假设我有一个对象:
public class AutoListSort implements Comparator<Auto> {
@Override
public int compare(Auto person1, Auto person2) {
return person1.getGodiste().compareTo(person2.getGodiste());
}
}
JS中的语法是否支持&#34;范围块&#34;或类似的东西,比如伪代码,这样我可以调用函数var Root = {
A: {
AA: ...,
AB: ...,
AC: function() {}
}
};
或获取值AC()
而不必冗余地写AB
?
像这样
Root.A
表示类似这样的内容
(Root.A) {
AC();
console.log(AB);
}
答案 0 :(得分:1)
目前,没有推荐的方法来实现这一目标。我们有with
语句,它完全符合您的要求,但它带有性能成本,strict mode
明确禁止(解释为here)。
如果由于某种原因您绝对需要此功能,您可以使用with
,如下所示:
var Root = {
A: {
AA: 5,
AB: 6,
AC: function() {return 4;}
}
};
with(Root.A) {
console.log(AB);
console.log(AA);
console.log( AC() );
}
编辑:
执行此操作的另一种方法(也是未经推荐的)是将Root.A
添加到全局窗口范围,如下所示:
var Root = {
A: {
AA: 5,
AB: 6,
AC: function() {return 3;}
}
};
// Extend window with Root.A's objects
window = Object.assign(window, Root.A);
console.log(AA);
console.log(AB);
console.log( AC() );
与上述解决方案的权衡是你正在污染全球范围(一个非常糟糕的主意)。
最后,如果您提前知道Root.A
的所有字段,则只需将字段分配给当前范围中具有相同名称的变量:
var Root = {
A: {
AA: 5,
AB: 6,
AC: function() {return 3;}
}
};
(function() {
var AA = Root.A.AA;
var AB = Root.A.AB;
var AC = Root.A.AC;
console.log(AA);
console.log(AB);
console.log( AC() );
})();
最后一种方式是首选方式,但它假设您提前了解所有字段名称。
答案 1 :(得分:1)
从某些版本(我认为是ES6)你可以使用解构赋值并写下这样的东西:
const {AA, AB, AC} = Root.A;
AC();
console.log(AB);
如果有帮助的话。
答案 2 :(得分:0)
this
引用外部对象,如果这是您要查找的内容。
var Root = {
A: {
AA: 1234,
AB: 'AB text',
AC: function() {
// this ==== Root
return this.AB;
}
}
};
console.log(Root.A.AC())
&#13;