Javascript附加一个对象语法糖
Javascript attach an object syntactic sugar?
我的类中有一个对象,如下所示:
this.options = {
a: 1,
b: 2,
...
};
我只是想知道是否有办法将选项对象"附加"到 Javascript 中的当前范围,这样我就可以直接引用a
和b
(而不是 this.options.a
和 this.options.b
)。像这样:
attach(this.options);
var myVariable = a + 3; // 4
detach(this.options);
或
with( this.options, {
// code here
var myVariable = a + 3; // 4
});
在上面,attach
和with
具有获取this.options
的所有子项并将它们附加到当前范围的效果,以便可以通过a
而不是this.options.a
访问它们。(with
版本只是在完成后分离this.options
,将可能具有破坏性的附加包含在该范围内)。
只要它在Spidermonkey/Mozilla引擎中工作,我不介意它是否不便携。
我提到这一点只是因为好奇和懒惰:所有嵌套名称都变得烦人,我知道在 R 语言中这是可能的(事实上,上面片段中的语法几乎正是你在 R 中编写的语法来实现这一点)。
JavaScript 有一个类似于您描述的 with
语句:
with (this.options) {
var myVariable = a + 3; // here a is actually this.options.a
}
然而,正如你在我链接到的MDN文章中看到的那样,使用它有一些缺点,因为,例如,潜在的歧义。在上面的例子中,a
可以是this.options
的属性,也可以是其他地方定义的变量,只看那个块就没有办法分辨。
不建议使用with
(在严格模式下
不过有一个安全的替代方案:创建一个引用(再次在您的示例中)this.options
的变量:
var o = this.options;
var myVariable = o.a + 3;
它不像单独键入a
那么短,但比到处重复this.options
要短。
您可以使用attach
和detach
方法以及用于存储实际数据对象的内部缓存将对象包装在另一个对象中。 然后让 attach
和 detach
方法在回调中提供data
作为this
:
function TheObject(data){
var that = this;
this.data = data;
this.attach = function(callback){
callback.apply(that.data);
}
}
//wrap the object
var myobj = new TheObject({
a: 1,
b: 2
});
myobj.attach(function(){
//"this" in here is the "data" in the object.
//this.a
//this.b
});
相关文章:
- 如果使用 lodash 将属性存在于另一个对象中,则向对象添加属性
- Javascript(Angular)从一个对象数组到第二个数组查找值
- 对一个对象使用reduce可以返回一个没有't在数组中包含目标字母
- AngularJS&JSON-从Previous&下一个对象
- jQuery$.inArray()总是返回-1和一个对象数组
- javascript处理一个对象数组以获得一个新的对象数组
- javascript函数,它接受两个输入:一个对象和一个键,并返回对象中该键的相应值
- 你能用来自数组的属性名称生成一个对象吗
- 预期响应包含一个对象,但在angular js中得到一个数组错误
- Protractor:element.getText()返回一个对象,而不是String
- 如何使用jQuery添加另一个对象的高度作为边距
- 计算从一个对象到另一个对象的路径并沿其移动
- 如何将一个对象添加到每个对象数组中
- 为了避免创建全局变量,可以将所有变量分配给一个对象吗
- 将javascript对象(属性+值)合并到一个对象中
- 尝试简化检查对象键是否为true并将其推送到另一个对象
- 从 javascript 中的对象方法返回一个对象
- 我需要使用什么语法来向一个对象的成员添加一个临时数组,该成员等同于一个字符串的通用列表
- Javascript附加一个对象语法糖
- 语法问题与js/jquery分配-测验问题在一个对象