JavaScript复合数据类型一:对象
对象(object),(其实Array,function是object类型中的特例)
JavaScript的对象有两种解释:
1.对象是将多个数据值集中在一个单元中,而且允许使用名字来存取这些值;
2.是表示的是已命名的值的无序集合;每个属性都有自己的名字和值。存储在对象中的已命名的值既可以是数字和字符串这样的原始值,也可以是对象;
3.表示的是有编号的值的有序集合---数组(Array)。
对象是已命名的数据集合,数据通常作为对象的属性来引用。
1。JavaScript被称为是“基于对象的” ,而不是面向对象的---有对象的概念: 数据和操作的封装, 但没有继承的概念。
2。从定义的角度看, JavaScript程序中有两种对象
a.JavaScript提供的内置对象 (built-in object)
--文档对象,HTML文档及其显示环境相联的对象, 例如window, document
--核心语言对象(全局对象)
字符串对象(String)
数学对象(Math)
日期对象(Date)
数组对象(Array)
b.程序员自定义的对象
3。一个对象是一个由变量、其他对象或方法组成的一个集合.
--在一个对象中包含的其他对象和变量被称为特性 (property)
--在一个对象内的函数(function)称为这个对象的方法( method)
--在一个特定的对象中的一些特性的序列称为数组, 例如document对象中的image[].
--多维数组是由含有数组特性的对象数组构造的.
对象的属性:可以是任何类型的数据,包括数组,函数以及其他的对象。
对象的方法:如果一个函数值是存储在某个对象的属性中的,那么那个函数通常被称为方法,属性名也就变成了方法名。
构造函数(constructor function):对象是通过调用特殊的构造函数创建的。
对象的初始化:
例如var a = image.width;
===================================================
JavaScript对象创建的几种方法
1.最简单的就是用new操作符创建对象:
var o =new object(); //创建一个空对象
<script language="javascript" type="text/javascript">
<!--
person = new Object()
person.name = "Tim Scarfe"
person.height = "6Ft"
person.run = function(){
this.state = "running"
this.speed = "4ms^-1"
}
//-->
</script>
我们在这个例子里定义了person这个对象,然后加入了它的属性和方法.在这个例子里,自定义的方法里有两个属性.
2.创建对象直接量:
var cricle={x:0,y:0,radius:2}
var homer={
name:"Homer Simpson",
age:34,
married:true,
email:"zzy@163.com"
}
3.用文字记号(JSLN/JSON)创建对象:
JSLN:JavaScript Literal Notation(文字记号)
JSON:JavaScript Object Notation(对象记号)
var 对象名 = {
变量1: 变量1的值,
变量1: 变量1的值,
……,
函数1: function() {
函数体
},
函数2: function() {
函数体
},
……
};
格式说明:
-大括号内直接填写变量或者函数;
-对象的内容与值以冒号分隔,成对出现;
-包含的变量或者函数之间以逗号分隔;
-函数需要写在function(){}的大括号之内。
例子:
var对象名 = {
name: “张三”,
age: 20,
eat: function() {
alert(‘我要吃饭’);
},
sleep: function() {
alert(‘我要睡觉’);
}
};
<script language="javascript" type="text/javascript">
<!--
// Object Literals
timObject = {
property1 : "Hello",
property2 : "MmmMMm",
property3 : ["mmm", 2, 3, 6, "kkk"],
method1 : function(){alert("Method had been called" + this.property1)}
};
timObject.method1();
alert(timObject.property3[2]) // will yield 3
var circle = { x : 0, y : 0, radius: 2 } // another example
// nesting is no problem.
var rectangle = {
upperLeft : { x : 2, y : 2 },
lowerRight : { x : 4, y : 4}
}
alert(rectangle.upperLeft.x) // will yield 2
//-->
</script>
用文字记号也可以创建对象,但要javascript 1.2以上版本.它的创建形式是多样的.
文字记号可是是数组,也可以是任意的javascript表达式或值.
用 new 操作符或文字记号创建一个自定义对象都是简单的,也是符合逻辑的.
但它最大的缺点就是结果不可复用.也不能很容易的用不同的版本初始化创建对象.
例如上面的第一个例子,如果 person 的 name 不是 "Tim Scarfe",那样我们不得不重新定义整个对象,仅仅为了适应它的一点点改变.
4.用function(对象构造器/函数)方式创建对象:
function data() {
this.变量1=变量1的值;
this.变量2=变量2的值;
……;
this.函数1= function() {
函数体
};
this.函数2= function() {
函数体
};
……;
}
格式说明:
-其内的变量或者函数前必需写上this关键字;
-对象的内容与值以等号分隔,成对出现;
-包含的变量或者函数之间以分号分隔。
-函数需要写在function(){}的大括号之内。
在OOP的世界里,用先前的方法定义对象在许多场合都有限制.我们需要一种创建对象的方法,类型可以被多次使用而不用重新定义.对象在实例化时每次都可以按需分配不同的值.实现这个目标的标准方法是用对象构造器函数.
在Javascript中,我们可以通过创建构造函数(对象构造器),赋予对象属性,并在合适的时候赋予方法。然后通过使用new 关键字来调用构造函数,从而创建一个新对象实例。
一个对象构造器只不过是个有规则的javascript函数,它就象一个容器(定义参数,调用其他函数等等).它们两者所不同的是构造器函数是由 new 操作符调用的.(你将在下面的例子中看到).基于函数语法形式的对象定义,我们可以使它工作得最好.
让我们用现实世界中的猫来举个例子. 猫的name和color是猫的属性.meeyow(猫叫)是它的一个方法.重要的是任何不同的猫都可能有不同的name和meeyow的叫声. 为了建立适应这些特征的对象类,我们将使用对象构造器.
下面给出了使用构造函数的示例。
例子1:
function data() {
this.name=“张三”;
this.age=20;
this.eat=function() {
alert(‘我要吃饭’);
};
this.sleep=function() {
alert(‘我要睡觉’);
}
}
例子2:
<script language="javascript" type="text/javascript">
var myObj = new Object(); //创建没有属性的通用对象。
var myDate = new Date(1949, 9, 1); //创建一个 Date 对象。
function Student(id,name,age){
this.id = id;
this.name = name;
this.age = age;
}
var myStu = new Student(1,"chouchy",18); //创建一个用户定义的对象Student。
</script>
例子3:
<script language="javascript" type="text/javascript">
<!--
function cat(name) {
this.name = name;
this.talk = function() {
alert( this.name + " say meeow!" )
}
}
cat1 = new cat("felix")
cat1.talk() //alerts "felix says meeow!"
cat2 = new cat("ginger")
cat2.talk() //alerts "ginger says meeow!"
//-->
</script>
在这里,函数cat()是一个对象构造器,它的属性和方法在函数体里用this来定义,用对象构造器定义的对象用new来实例化.注意我们如何非常容易的定义多个cat 的实例.
每一个都有自己的名字,这就是对象构造器带给我们的灵活性.构造器建立了对象的蓝图.并不是对象本身.
5.用原型方式创建对象:
var 对象名 = {};
对象名.prototype.变量1=变量1的值;
对象名.prototype.变量2=变量2的值;
……;
对象名.prototype.函数1= function() {
函数体
};
对象名.prototype.函数2= function() {
函数体
};
……;
格式说明:
-初始对象体内可以不定义任何东西;
-在要定义的变量前加“对象名.prototype.”的格式;
-对象的内容与值以等号分隔,成对出现;
-包含的变量或者函数之间以分号分隔,也可以省去分号。
-函数需要写在function(){}的大括号之内。
例子:
var data = {};
data.prototype. name =“张三”;
data.prototype. age =20;
data.prototype. eat = function() {
alert(‘我要吃饭’);
};
data.prototype. sleep= function() {
alert(‘我要睡觉’);
};
在原型里增加方法.在上面我们看到的例子里,对象的方法是在构造器里定义好的了.
另外一种实现的途径是通过原型(prototype).xxx,原型是javascript继承的一种形式.
我们可以为对象定义好后,再创造一个方法.原来所有对象的实例都将共享.
在编写构造函数时,可以使用原型对象(它本身是所有构造函数的一个属性)的属性来创建属性和方法。原型属性和方法将
按引用复制给类中的每个对象,因此它们都具有相同的值。可以在一个对象中更改原型属性的值,新的值将覆盖默认值,但仅在该实例中有效。属于这个类的其他对象不受此更改的影响。
让我们来扩展最初的 cat 对象.增加一个改名的方法.用 prototype 的方式.
<script language="javascript" type="text/javascript">
<!--
cat.prototype.changeName = function(name) {
this.name = name;
}
firstCat = new cat("pursur")
firstCat.changeName("Bill")
firstCat.talk() //alerts "Bill says meeow!"
//-->
</script>
就象你所看到的.我们仅只用了 关键字 prototype 实现了在对象定义后马上增加了changeName方法.
这个方法被所有的实例共享.
用原型(prototype)重载javascript对象,原型在自定义对象和有选择性的重载对象上都可以工作.比如Date()或String这可
能是无止境的.
下面给出了使用自定义构造函数Student的示例,注意 this 关键字的使用。
Student.prototype.school = "SWNU"; //为Student对象增加了一个属性:school
Student.prototype.study = studyMethod; //为Student对象增加了一个方法:studyMethod
function studyMethod(){
//实现方法:studyMethod
alert("Good Good Study,Day Day Up!");
}
测试:
alert(myStu.id+":"+myStu.name+":"+myStu.age); //显示myStu对象的属性:id,name,age
myStu.study; //调用myStu的方法:studyMethod
按照这个原则,可以给预定义的构造函数(都具有原型对象)定义附加属性和方法。
6.用create方式创建对象:
该方式利用了Prototype JavaScript组件库。
var 对象名 = Class.create();
Object.extend(对象名.prototype, {
变量1: 变量1的值,
变量1: 变量1的值,
……,
函数1: function() {
函数体
},
函数2: function() {
函数体
},
……
});
格式说明:
-对象的创建使用了Prototype库中的Class.create()函数;
-对象的内容使用Prototype库中的Object.extend()函数来扩展;
-被扩展的对象在传入Object.extend函数时一定要带上prototype,
-扩展内容被大括号包含,其内与JSON方式的定义格式完全相同。
例子:
var data = Class.create();
Object.extend(dta.prototype, {
name: “张三”,
age: 20,
eat: function() {
alert(‘我要吃饭’);
},
sleep: function() {
alert(‘我要睡觉’);
}
});
7.其实,JS对象的定义还有其它的方式,你也可以用上面这几种进行组合定义,这显出了JS作为动态语言的自由性。
JS对象的创建正规方法如下:var d1 = new Data();
JS对象变量的引用方式有两种:
a.点号方式引用,如,data.name。
b.数组方式引用,如,data[‘name’]。
构造函数:
在对象被创建的同时必须调用构造函数,用于初始化对象。
如,var o = new Object(); //创建一个空对象,没有属性的对象
JavaScript还支持内部构造函数,它以另一种简洁的方式初始化新创建的对象。
如,构造函数Date()可以初始化一个表示日期和时间的对象:
var now = new Date(); //当前的日期时间
var new_year = new Date(2000,10,01); //表示2000年10月1日
属性的设置和查询
var book=new object();
book.title="测试";
alert(book,title);
属性是通过一个值赋给对象的一个新属性来创建它。虽然通常用关键字var来声明变量,但是声明对象属性不用。
属性的枚举:for/in循环提供了一种遍历对象属性的方法
function displayppName(obj)
{
var name="";
for(var name in obj)
name+=name+"/n"
alert(name);
}
JavaScript一些专用对象:Date,RegExp,Error
Date,
RegExp,
Error
本文介绍了JavaScript中对象的六种创建方法,包括使用new操作符、对象直接量、构造函数、原型方式等,并提供了详细的示例代码。

被折叠的 条评论
为什么被折叠?



