JavaScript冒号运算符

3
我正在尝试学习JavaScript。在阅读了这个页面之后:What does ':' (colon) do in JavaScript?

我尝试替换

var store = new dojo.data.ItemFileReadStore({
         url: "countries.json"
 });

with

var store = new dojo.data.ItemFileReadStore();
        store.url = "countries.json";

它不起作用。能否有人指出错误,或者解释冒号操作符的正确使用方式?谢谢。
6个回答

9
那不是一个公正的比较,虽然你已经接近了。
var store = new dojo.data.ItemFileReadStore({
         url: "countries.json"
 });
//Creates a new store object, passing an anonymous object in with URL
// property set to "countries.json"

没有使用冒号运算符的替代方法是:
var props={};
props.url="countries.json"
var store = new dojo.data.ItemFileReadStore(props);
//Does same as above but doesn't use :

这不是 JavaScript 中 : 的唯一用法,它还可以用于三元运算符(alert(b==c?'相等':'不相等');)和标签中(例如在 case 语句中)。


2
哦,我明白了,在第一个片段中,使用"url"构建了store对象,但在替换片段中,我创建了一个空对象,并设置了其属性。非常感谢您的所有帮助!我已经尝试在线查找了几个小时,没有任何效果。再次感谢。 - rgamber
如果ItemFileReadStore()返回一个对象,那么就是这样。区别在于(1)你正在传递某些东西(这可能意味着对函数有所了解),而在(2)之后你正在设置一个值。 - Rudu

2

第一步将url参数传递给构造函数或对象,它可能会在内部对其进行操作 - 例如将其分配给其他变量或属性,例如"url2"。

第二步将该对象的url属性赋值,您不知道它是否会被使用。


1
在第一段代码中,您正在创建一个新对象并将其作为参数传递给函数。
而在第二部分中,您正在运行该函数,然后设置存储对象的属性。 它们是完全不同的事情,因为您没有使用参数调用函数,所以它可能无法正常运行。而且您正在将函数的返回值设置为对象,而不是设置属性。

0
如果第二种方法不起作用,那么你可能没有返回一个带有 new dojo.data.ItemFileReadStore(); 的对象,这会阻止你使用点语法进行扩展。如果你有一个对象,像那样添加就可以正常工作。
编辑:我看错了,在其中一种情况下你正在传递参数,在另一种情况下你正在分配返回值,所以是两件不同的事情,我将以上内容留作参考。

0

dojo.data.ItemFileReadStore 对象在创建时可能需要 url 属性。如果不是这种情况,那么在初始化对象后,该对象不允许你手动设置该属性。

在 JSON 中,冒号用于指示传递对象结构({})中的键和值之间的差异。


0
在这种情况下,您第一个示例中的对象文字用于将一组选项传递给构造函数。构造ItemFileReadStore,然后尝试设置这些选项可能不等效,因为它可能需要这些选项才能开始构建对象。
您需要执行以下操作才能将替换为=:
var options = {};

options.url = 'countries.json';

var store = new dojo.data.ItemFileReadStore(options);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接