创建对象
正如前文介绍的,JavaScript对象是一个特殊的数据结构,JavaScript对象只是一种特殊的关联数组。创建对象并不是总需要先创建类,与纯粹面向对象语言不同的是,JavaScript中创建对象可以不使用任何类。JavaScript中创建对象大致有3种方式:
➢ 使用new关键字调用构造器创建对象。
➢ 使用Object直接创建对象。
➢ 使用JSON语法创建对象。
使用new关键字调用构造器创建对象
使用new关键字调用构造器创建对象,这是最接近面向对象语言创建对象的方式,new关键字后紧跟函数的方式非常类似于Java中new后紧跟构造器的方式,通过这种方式创建对象简单、直观。JavaScript中所有的函数都可以作为构造器使用,使用new调用函数后总可以返回一个对象。
例子
<script type="text/javascript">
// 定义一个函数,同时也定义了一个Person类
function Person(name , age)
{
//将name、age形参赋值给name、age实例属性
this.name = name;
this.age = age;
}
// 分别以两种方式创建Person实例
var p1 = new Person();
var p2 = new Person('yeeku' , 29);
// 输出p1的属性
document.writeln("p1的属性如下:"
+ p1.name + p1.age + "<br />");
// 输出p2的属性
document.writeln("p2的属性如下:"
+ p2.name + p2.age);
</script>
使用Object直接创建对象
JavaScript的对象都是Object类的子类,因此可以采用如下方法创建对象。
var myObj=new Object();
这是空对象,该对象不包含任何的属性和方法。与Java不同的是,JavaScript是动态语言,因此可以动态地为该对象增加属性和方法。在静态语言(如Java、C#)中,一个对象一旦创建成功,它所包含的属性值可以变化,但属性的类型、属性的个数都不可改变,也不可增加方法。
JavaScript既可以为对象动态地增加方法,也可以动态地增加属性。JavaScript还可以通过new Function()的方法来定义匿名函数,因此完全可以通过这种方式来为JavaScript对象增加方法,也允许将一个已有的函数添加为对象的方法。
例子
<script type="text/javascript">
//创建空对象
var myObj = new Object();
//为空对象增加属性
myObj.name = 'yeeku';
myObj.age = 29;
//创建一个函数
function abc()
{
document.writeln("对象的name属性:" + this.name);
document.writeln("<br />");
document.writeln("对象的age属性:" + this.age);
};
//将已有的函数添加为对象的方法
myObj.info = abc;
document.writeln("<hr />");
//调用方法
myObj.info();
</script>
注意
为对象添加方法时,不要在函数后添加括号。一旦添加了括号,将表示要把函数的返回值赋给对象的属性。
使用JSON语法创建对象
JSON(JavaScript Object Notation)语法提供了一种更简单的方式来创建对象,使用JSON语法可避免书写函数,也可避免使用new关键字,可以直接创建一个JavaScript对象。为了创建JavaScript对象,可以使用花括号,然后将每个属性写成“key : value”对的形式。
使用JSON语法创建JavaScript对象时,属性值不仅可以是普通字符串,也可以是任何基本数据类型,还可以是函数、数组,甚至可以是另外一个JSON语法创建的对象,例如:
person =
{
name : 'yeeku',
gender : 'male',
//使用JSON对象为其指定一个属性
son : {
name : 'nono',
grade : 1
},
//使用JSON语法为person直接分配一个方法
info : function()
{
document.writeln("姓名:"+this.name);
}
}
使用JSON创建数组的语法格式如下:
arr = [value1, value2...]
例子
<script type="text/javascript">
// 定义一个对象
var person =
{
// 定义第一个简单属性
name : 'wawa',
// 定义第二个简单属性
age : 29 ,
// 定义第三个属性:数组
schools : ['小学' , '中学' , "大学"],
// 定义第四个属性,对象数组
parents :[
{
name : 'father',
age : 60,
address : '广州'
}
,
{
name : 'mother',
age : 58,
address : '深圳'
}
]
};
alert(person.parents);
</script>
实际上,JSON已经发展成一种轻量级的、跨语言的数据交换格式,目前已经明确支持JSON语法的编程语言非常多,比如Java、C/C++、C#、Ruby、Python、PHP、Perl等主流编程语言都支持JSON格式的数据。
由于JSON格式的数据交换具有轻量级、易理解、跨语言的优势,因此JSON格式已成为XML数据交换格式的有力竞争者。
注:本博客内容节选自李刚编著的疯狂HTML 5/CSS 3/JavaScript讲义 ,详细内容请参阅书籍。