引用javascript对象内的另一个字段
Reference another field inside a javascript object
我在javascript:中有一个对象
admins: {
articles: {
path: '/admins/articles',
template: '/views/admins/articles.html',
link: function() {
return path; // !!! how to reference the 'path'?
}
}
}
我有很多这样的对象,每个对象都有一个path
字段和一个link
函数。我想在link
中使用字段path
,但不能只使用path
。
我该怎么办?
您可以使用this
来引用对象。标准object.method()
"点"语法将在method
:中将this
设置为object
var someObj = {
admins: {
articles: {
path: '/admins/articles',
template: '/views/admins/articles.html',
link: function() {
return this.path; // !!! how to reference the 'path'?
}
}
}
};
var returnedPath = someObj.admins.articles.link();
演示:http://jsfiddle.net/2Pt7n/
(还有其他方法可以调用函数,这样this
就不会被设置为合适的对象,但我希望它们不适用于这里——你没有真正说明你是如何使用对象或调用函数的,但如果不是我展示的方式,请更新你的问题,我会相应地更新我的答案。)
我只想指出,您不想在这里使用ES6胖箭头,因为在这种情况下不会有this指针:
var someObj = {
admins: {
articles: {
path: '/admins/articles',
template: '/views/admins/articles.html',
link: () => {
return this.path; // 'this' is undefined
}
}
}
};
someObj.admins.articles.link()===未定义的
您显示的不是JSON。它是一个Javascript对象,与JSON不同。JSON是一种严格定义的数据序列化格式,是Javascript对象文字的子集。
Javascript没有提供任何语法来引用对象文字中的对等属性,正如你所希望的那样。命名它们是一种想法,但它没有帮助,因为在定义文字时,名称不存在,所以名称不能用于文字本身。
此外,请注意,您定义的语法使对象倾斜:您可以访问路径作为obj.admins.articles.path
,但链接是您必须调用的函数:obj.admins.articles.link()
。
我不会谈论这怎么不是JSON(其他人对此做了很好的介绍)。
你可以这样做来获得路径:
return admins.articles.path;
下面是一把小提琴,展示它的工作原理:http://jsfiddle.net/UwbLt/
我正在阅读答案,甚至理解一些用户的观点(JSON应该只用于数据),并同意这是正确的,我刚刚创建了一个概念验证示例。看一看。
// just a regular object
var obj = {
a: "aaa",
b: "bbb",
c: function() {
return this.a;
}
};
console.log( obj.c() ); // prints "aaa"
// isn't it json just because it has a function? ExtJS will treat it like JSON, but jQuery not
var json = "{" +
"'"a'": '"aaa'", " +
"'"b'": '"bbb'", " +
"'"c'": function() {" +
" return this.a;" +
"}" +
"}";
// ok, the "json" above
console.log( json );
//var jsonObj = $.parseJSON( json ); // does not work
//var jsonObj = eval( json ); // does not work too
var jsonObj = Ext.decode( json ); // it works! shortcut for Ext.JSON.decode
console.log( jsonObj.c() ); // prints "aaa"
这几乎和nnnnnn发布的一样,但我想我也会发布它,只是为了补充答案。jsFiddle:http://jsfiddle.net/davidbuzatto/rhKAM/
因此,我认为,即使与JSON的定义相矛盾,JSON也可能具有(或应该具有)与使用常规对象初始值设定项sintax创建的对象相同的特征,因为它的名称是JavaScript对象符号,而不是"轻量级"对象符号。我知道,我知道,反序列化程序无法根据目标语言反序列化函数,但为什么ExtJS支持这种"行为"?这里可以找到一个很好的讨论:在JSON结果中定义函数有效吗?
只是澄清一下。我在我的JSON中不使用(也不会使用)函数。
- 从Rally获取一个特定的标记,以便计算另一个字段中的值
- 通过单击动态加载的表中同一行的另一个字段来更新一行的字段
- 可以't无法将一个字段复制到另一个字段
- 如何隐藏&使用jQuery禁用依赖于另一个字段值的字段
- 在输入字段中选择一个值,然后用相应的数据填充另一个字段
- 根据另一个字段选择获取新值后更新下拉列表内容
- 反应:以动态生成的形式根据另一个字段更新字段值
- 使用另一个字段的日期+14天自动填充字段
- 引用javascript对象内的另一个字段
- 禁用基于rails中另一个字段的字段窗体
- 以角度形式将一个输入字段值连接(附加)到另一个字段
- 根据下拉框的选定值,我需要更改laravel 5中的另一个字段值
- 在更改另一个字段时触发Yii字段验证
- 更改另一个字段中的值
- 使用 jQuery 将一个字段的内容复制到另一个字段
- 根据角度中的另一个字段设置输入字段的默认值
- 使用输入数字值作为另一个字段的输入数字最大值
- 节点js可以计算两个输入字段的值并更新另一个字段吗?
- 基于同一表中的另一个字段自动更新表中的字段
- 如何在更改字段中的选择后重置另一个字段中的数据