javascripts中的expando对象是什么?
出于什么目的我们需要这个?任何完整的例子将不胜感激
我在这里发现了一篇文章Javascript: The red-headed stepchild of web development
答案 0 :(得分:41)
好吧,在javascript中,任何对象都是一个expando对象。正如文章所述,这意味着当您尝试访问属性 1 时,它将自动创建。
var myObj = {}; // completely empty object
myObj.myProp = 'value';
当您为myProp
赋值时,属性myProp
是动态创建的,尽管它之前不存在。在许多其他语言中,例如C#,这通常是不可能的(实际上C#也刚刚启用了expando对象支持,但除此之外)。要在C#中访问普通类中的属性,您需要在类中指定它确实具有此属性。
1 不太正确。请参阅下面的npup评论以获得澄清。
答案 1 :(得分:10)
除了基本类型(字符串,数字,布尔值)之外的所有内容都是对象并支持Key:values结构。可以使用点表示法和方括号来访问和设置属性(键)。
var myObj = {};
myObj.myProp1 = 'value1'; //works, an expando property
myObj[myProp2] = 'value2'; // doesn't work, myProp2 is an undefined name.
myObj['myProp2'] = 'value2'; // works , an expando property
myObj[2010]= 'value'; //note the key is number, still works, an expando property??
myObj.2010 = 'value'; // FAILS. to use dot notation, key must be a string
答案 2 :(得分:4)
2007年编写的一篇文章,它使用document.all(作为唯一方式访问元素)?那是一个大红旗。
它只是打扮“你可以用一些流行语添加属性到对象”。
我们需要能够这样做,因为否则我们将无法存储数据,这将使JavaScript成为一种非常无用的语言。
(一切都是一个数组?不是没有。而且它在没有hasOwnProperty包装器的情况下迭代一个对象。这不安全。只要远离文章,它就比无用更糟糕了)
答案 3 :(得分:4)
JavaScript将具有特定ID名称的元素转换为返回的DOM对象的expandos。它解释为here。