深入理解JavaScript中的对象
JavaScript是一种面向对象编程(OOP)语言。一种编程语言可以被称为面向对象的,它为开发者提供了四种基本功能:
- 封装-存储相关的信息,无论是数据或方法,还是对象
- 聚合- 存储一个对象到另一个对象的内部
- 继承-类的能力依赖于另一个类(或类数),用于其部分的属性和方法
- 多态性-编写函数或者方法,在各种不同的方式工作
对象是由属性。如果属性包含一个函数,它被认为是一个对象的方法,否则,该属性被认为是一个属性。
对象属性:
对象的属性可以是任何三种基本数据类型的,或者任何抽象数据类型,如另一个对象。对象属性通常是内部使用的对象的方法的变量,但也可以是用于整个页面全局可见的变量。
用于添加属性的目的语法是:
objectName.objectProperty=propertyValue;
示例:
下面是一个简单的例子来说明如何利用“称号”的文件对象的属性来获取文档标题:
varstr=document.title;
对象的方法:
方法是让对象做某件事。一个函数和一个方法,所不同的是一个function语句的一个独立的单元和方法被附加到对象,并可以通过这个关键字被引用之间的差别不大。
方法可用于一切从显示对象的屏幕上的内容,以对一组本地的属性和参数执行复杂的数学运算是有用的。
例子:
下面是一个简单的例子来说明如何使用write()文档对象的方法写在文档中的任何内容:
document.write("Thisistest");
用户定义的对象:
所有用户定义的对象和内置对象被称为对象的对象的后代。
new操作符:
new运算符用于创建对象的实例。要创建一个对象,new运算符后面是构造方法。
在下面的例子中,构造方法Object(),Array(),和Date().。这些构造函数是内置的JavaScript函数。
varemployee=newObject(); varbooks=newArray("C++","Perl","Java"); varday=newDate("August15,1947");
Object()构造函数:
构造函数是用来创建和初始化对象的函数。JavaScript提供了一个特殊的构造函数调用Object()来构建的对象。Object()构造的返回值被分配给一个变量。
变量包含一个引用到新的对象。分配给该对象的属性是不变量,并且不使用var关键字来定义。
示例1:
这个例子演示了如何创建一个对象:
<html> <head> <title>User-definedobjects</title> <scripttype="text/javascript"> varbook=newObject();//Createtheobject book.subject="Perl";//Assignpropertiestotheobject book.author="Mohtashim"; </script> </head> <body> <scripttype="text/javascript"> document.write("Booknameis:"+book.subject+"<br>"); document.write("Bookauthoris:"+book.author+"<br>"); </script> </body> </html>
示例2:
这个例子演示如何创建一个对象,一个用户定义的函数。此处this关键字用于指已传递给函数的对象:
<html> <head> <title>User-definedobjects</title> <scripttype="text/javascript"> functionbook(title,author){ this.title=title; this.author=author; } </script> </head> <body> <scripttype="text/javascript"> varmyBook=newbook("Perl","Mohtashim"); document.write("Booktitleis:"+myBook.title+"<br>"); document.write("Bookauthoris:"+myBook.author+"<br>"); </script> </body> </html>
定义方法的对象:
前面的示例演示了如何构造函数创建对象并分配属性。但是,我们需要通过分配方法,以它来完成一个对象的定义。
例子:
下面是一个简单的例子来说明如何与一个对象添加一个函数:
<html> <head> <title>User-definedobjects</title> <scripttype="text/javascript"> //Defineafunctionwhichwillworkasamethod functionaddPrice(amount){ this.price=amount; } functionbook(title,author){ this.title=title; this.author=author; this.addPrice=addPrice;//Assignthatmethodasproperty. } </script> </head> <body> <scripttype="text/javascript"> varmyBook=newbook("Perl","Mohtashim"); myBook.addPrice(100); document.write("Booktitleis:"+myBook.title+"<br>"); document.write("Bookauthoris:"+myBook.author+"<br>"); document.write("Bookpriceis:"+myBook.price+"<br>"); </script> </body> </html>
with关键字:
with关键字作为一种速记的引用对象的属性或方法。
指定为参数的对象就成为接下来的块的持续时间的默认对象。为对象的属性和方法可以在不命名的对象。
语法
with(object){ propertiesusedwithouttheobjectnameanddot }
例子:
<html> <head> <title>User-definedobjects</title> <scripttype="text/javascript"> //Defineafunctionwhichwillworkasamethod functionaddPrice(amount){ with(this){ price=amount; } } functionbook(title,author){ this.title=title; this.author=author; this.price=0; this.addPrice=addPrice;//Assignthatmethodasproperty. } </script> </head> <body> <scripttype="text/javascript"> varmyBook=newbook("Perl","Mohtashim"); myBook.addPrice(100); document.write("Booktitleis:"+myBook.title+"<br>"); document.write("Bookauthoris:"+myBook.author+"<br>"); document.write("Bookpriceis:"+myBook.price+"<br>"); </script> </body> </html>