51

javascripts中的expando对象是什么?

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

我在这里找到了 1 篇文章Javascript:Web 开发的红发继子

4

4 回答 4

43

好吧,在 javascript 中,任何对象都是 expando 对象。正如文章所述,这意味着每当您尝试访问属性1时,它都会自动创建。

var myObj = {}; // completely empty object
myObj.myProp = 'value';

在您分配值的那一刻myProp,该属性myProp被动态创建,即使它以前不存在。在许多其他语言中,例如 C#,这通常是不可能的(实际上 C# 也刚刚启用了 expando 对象支持,但这不是重点)。要在 C# 中访问普通类中的属性,您需要在类中指定它确实具有此属性。

1不太正确。有关说明,请参阅下面的 npup 评论。

于 2010-03-24T07:39:18.283 回答
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
于 2011-01-19T11:58:17.923 回答
4

2007 年写的一篇使用 document.all(作为访问元素的唯一方式)的文章?这是一个很大的危险信号。

它只是用一些流行语来修饰“您可以向对象添加属性”。

我们需要能够做到这一点,否则我们将无法存储数据,这将使 JavaScript 成为一种非常无用的语言。

(一切都是一个数组?不,它不是。它在没有 hasOwnProperty 包装器的情况下迭代一个对象。这不安全。远离文章,它比无用更糟糕)

于 2010-03-24T07:38:28.533 回答
4

JavaScript 将具有特定名称 ID 的元素转换为返回的 DOM 对象的扩展。它在这里解释。

于 2011-03-02T16:58:18.077 回答