首页 > JavaScript > javascript 对象属性的设置、查询、枚举、删除
2009六月20

javascript 对象属性的设置、查询、枚举、删除

前一篇简单介绍了一下javascript对象的创建方法,那么现在我们就来让对象变的有血有肉,给之增添属性。

这篇涉及如下几方面内容,一是设置javascript对象的属性,二是读取javascript对象的属性,三是枚举对象所有的属性,四是当你看一个属性不顺眼时我告诉你怎么删除这个属性。

如果我只告诉你我为一个对象设置了属性,可是你没看到,你肯定不相信嘛,所以这篇主要说的其实就是set and get list and delete 。

在js中,通常使用”.”运算符来存取对象的属性。所以,这个get和set都很简单啦,都是通过这个“.”来操作的。

有没有一种被我耍了的感觉?嘿嘿。。 8)

java的软件工程师应该对此没啥感觉。因为在java内部,读取对象的属性就是用的这个”点”操作符进行的。

学php的家伙你就可以把之对应为”->”。呵,现在感觉这个比”.”更帅。

位于”.”运算符左边的值应该是对对象的引用(就是一个对象的实体),

位于”.”运算符右边的值就是对象的属性名了。它必须是一个标识符,不能是字符串或表达式

上面这句话应该很好理解,对应我上一篇举的数组的例子。user的user_name属性应该写为 user.user_name而不应该是user.”user_name”。

参照书中代码,写一个小例子吧,让大家更好的理解一下这个get和set方法。呵呵。

// 创建一个对象,并把对它的引用保存在一个变量中

var user = new Object();

// 设置对象的一个属性
user.name = "simaopig";

user.age  = "25";

// 对象的属性也可以是对象啊,上一篇日志里说过了

user.son  = new Object();

user.son.name = "小 simaopig";

// 没办法,最少还有两年才能有他
user.son.age  = "-2";


// 读取对象的属性

alert("user->name is "+user.name+"\n\t"+
    "now user->age is "+user.age+"\n\t"+
    "now user->son->name is "+user.son.name+"\n\t"+
    "now user->son->age is "+user.son.age);

呵呵,没办法,现在还没有儿子,呃,连姑娘也没有。呵呵。

所以我家儿子的年龄现在居他妈妈说应该是-2岁。嗯。。呵呵。。

呵,文章都发表了,忽然想起来没有讲属性的枚举。罪过,罪过。现在补上。

要想列举js对象的所有属性怎么办?告诉你,没办法。呵呵。。呃,先别着急扔砖头好不?

但是js提供了方法可以枚举出所有的用户定义的属性,但是不能枚举出某些预定义的属性或方法。

这个方法就是for/in 循环,啥?你说这个方法是用在数组身上的?呃,难道数组不是对象吗?

答,数组其实是对象。嗯。就是数组对象。。 :-D

这回得抄书中的代码了。呵呵,书中给了一个小函数,封装了一下for in 的方法,列举一个对象的所有用户定义的属性。

function DisplayPropertyNames(obj)
{
    var names = "";
    for(var name in obj) names += name + "\n";
    alert(names);
}

如果列位客官要问,如果我直接调用还没有定义的对象的属性咋办?

告诉你,凉拌,那样你会得到一个神奇的结果:undefined

想删除对象的一个属性咋办?

你咋这么多问题?嗯。用这个方法吧,delete

例如:

//这样就删除了上面定义的对象user的name属性
delete user.name;

删除一个属性并不仅仅是把该属性设为undefined,而是真正的移除了这个属性。

for/in 可以枚举出已经被设为undefined的属性,但是被删除的属性,佛也没辙。。

文章作者:simaopig
本文地址:http://www.xiaoxiaozi.com/2009/06/20/907/
版权所有 © 转载时必须以链接形式注明作者和原始出处!

9 Responses to “javascript 对象属性的设置、查询、枚举、删除”

  1. #1 bolo 回复 | 引用 Post:2009-06-20 20:43

    这个脚本很有趣,运行以后会输出什么呢?能不能给个demo?

    [回复]

  2. #2 huaimao 回复 | 引用 Post:2009-06-21 01:21

    :-D 建议给个DEMO…..

    [回复]

  3. #3 simaopig 回复 | 引用 Post:2009-06-21 09:18

    @bolo
    呵,因为我这个demo是做的弹出效果,你们可能不会喜欢。
    但是强烈要求下,我放出demo地址吧。呵呵。

    @huaimao
    已经放出。呵呵。

    [回复]

  4. #4 huaimao 回复 | 引用 Post:2009-06-21 13:14

    :idea: 访问错误….

    [回复]

  5. #5 simaopig 回复 | 引用 Post:2009-06-21 17:03

    @huaimao
    呃,不会啊,我这里是没问题的哈。并且我没有设HOST。恩。

    [回复]

  6. #6 LAONB 回复 | 引用 Post:2009-06-22 15:54

    看到了,三次弹窗 :-D

    [回复]

  7. #7 simaopig 回复 | 引用 Post:2009-06-22 15:55

    @LAONB
    呵呵,是的。因为大家都不喜欢弹窗,所以本来没打算放出demo的。呵呵。 :-P

    [回复]

  8. #8 Lxhome 回复 | 引用 Post:2009-06-22 19:48

    原来是这样用的,好像可以拿来捉弄人哦, :-D

    [回复]

  9. #9 simaopig 回复 | 引用 Post:2009-06-22 21:03

    @Lxhome
    别啊,那不是恶意网站。。表吓我。。

    [回复]

发表评论

:wink: :twisted: :roll: :oops: :mrgreen: :lol: :idea: :evil: :cry: :arrow: :?: :-| :-x :-o :-P :-D :-? :) :( :!: 8-O 8)