javascript 字面量
对象字面量
我们可以将JavaScript中的对象简单地理解为名值对组成的散列表(hash table,也叫哈希表)。在其他编程语言中被称作“关联数组”。其中的值可以是原始值也可以是对象。不管是什么类型,它们都是“属性”(property),属性值同样可以是函数,这时属性就被称为“方法”(method)。
JavaScript中自定义的对象(用户定义的本地对象)任何时候都是可变的。内置本地对象的属性也是可变的。你可以先创建一个空对象,然后在需要时给它添加功能。“对象字面量写法(object literal notation)”是按需创建对象的一种理想方式。
看一下这个例子:
//
定义空对象 var dog = {}; // 添加一个属性 dog.name = "Benji"; // 添加一个方法 dog.getName = function () { return dog.name; };
在这个例子中,我们首先定义了一个空对象,然后添加了一个属性和一个方法,在程序的生命周期内的任何时刻都可以:
更改属性和方法的值,比如: dog.getName = function () { // 重新定义方法,返回一个硬编码的值 return "Fido"; }; 删除属性/方法 delete dog.name; 添加更多的属性和方法 dog.say = function () { return "Woof!"; }; dog.fleas = true;
每次都创建空对象并不是必须的,对象字面量模式可以直接在创建对象时添加功能,就像下面这个例子:
var dog = { name: "Benji", getName: function () { return this.name; } };
对象字面量语法
如果你从来没有接触过对象字面量的写法,可能会感觉怪怪的。但越到后来你就越喜欢它。本质上讲,对象字面量语法包括:
将对象主体包含在一对花括号内({ 和 })。
如果将对象赋值给一个变量,不要忘了在右括号}之后补上分号。
通过构造函数创建对象
JavaScript中没有类的概念,这给JavaScript带来了极大的灵活性,因为你不必提前知晓关于对象的任何信息,也不需要类的“蓝图”(译注:指类的结构)。但JavaScript同样具有构造函数,它的语法和Java或其他语言中基于类的对象创建非常类似。
你可以使用自定义的构造函数来创建对象实例,也可以使用内置构造函数来创建,比如Object()、Date()、String()等等。
下面这个例子展示了用两种等价的方法分别创建两个独立的实例对象:
// 一种方法,使用字面量 var car = {goes: "far"}; // 另一种方法,使用内置构造函数 // 注意:这是一种反模式 var car = new Object(); car.goes = "far";
从这个例子中可以看到,字面量写法的一个明显优势是,它的代码更少。“创建对象的最佳模式是使用字面量”还有一个原因,它可以强调对象就是一个简单的可变的散列表,而不必一定派生自某个类。
另外一个使用字面量而不是Object()构造函数创建实例对象的原因是,对象字面量不需要“作用域解析”(scope resolution)。因为存在你已经创建了一个同名的构造函数Object()的可能,当你调用Object()的时候,解析器需要顺着作用域链从当前作用域开始查找,直到找到全局Object()构造函数为止。