js中Object类型的一些特点

2021-03-15 10:51:46 浏览数 (1)

在javascript中,可以通过构造方法和对象字面量的方式定义对象。

前者通过实例化一个对象,再在这个对象的基础上添加属性和方法,如:

代码语言:javascript复制
var person = new Object();
person.name = "lee";
person.callName = function(){
   alert(this.name);
}

这种方法简单,直接,但感觉也太随意了,当需要定义大量的属性或方法时,会给人一种凌乱不堪的感觉。

我自己就更偏向于以对象字面量的方式来定义,如上面这个例子,可以这样写:

代码语言:javascript复制
var person = {
    name:"lee",
    callName:function(){
        alert(this.name);
    }
}

这种方式看起来非常清晰,一目了然。我觉得非常好,另外,很多优秀的框架利用JS对象的这个特性来实现可选参数机制,特别是一个函数带有大量的可选方法时,将可选参数以一个对象字面量的形式传入,再在函数里面作处理,是非常好的选择。下面是一个关于可选参数的例子:

代码语言:javascript复制
function greeting(lastName,option){
    var words = option.words || "Good morning!";
    var prefix = option.prefix || "Mr";
    alert(prefix lastName " " words);
}
greeting("lee",{});//Mr lee,Good morning
greeting("lee",{prefix:'Miss'});//Miss lee,Good morning
greeting("lee",{words:'Good afternoon',prefix:'Miss'});//Miss lee,Good afternoon

另外,关于取对象属性的问题,也有个地方值得一提。

取一个对象的某个属性,有两个方法:一是最常见的用点号(.)来取,如person.name,就是取对象person的name属性;其实还有另一种方法,就是用中括号([])来取,如取前面所述的person.name,也可以写作person["name"],当然,这样写不符合其它OOP语言的习惯,所以这种写法也并没有多少人喜欢用,但值得注意的是,当属性名是变量的时候,点号取属性值法不能或者说只能通过一些HACK来取相应的属性值,而中括号法则能很直观,简单地实现。如:

代码语言:javascript复制
var person = {
    name:'waitat'
};
//点号法
var attributeName = "name";
alert(person.attributeName);//undefined
alert(person[attributeName]);//waitat

看到了吗?这就是差距了。呵呵

0 人点赞