Javascript expando对象

时间:2010-03-24 07:33:55

标签: javascript expando

javascripts中的expando对象是什么?

出于什么目的我们需要这个?任何完整的例子将不胜感激

我在这里发现了一篇文章Javascript: The red-headed stepchild of web development

4 个答案:

答案 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