JAVASCRIPT之创建对象Word下载.docx
- 文档编号:19531380
- 上传时间:2023-01-07
- 格式:DOCX
- 页数:9
- 大小:19.47KB
JAVASCRIPT之创建对象Word下载.docx
《JAVASCRIPT之创建对象Word下载.docx》由会员分享,可在线阅读,更多相关《JAVASCRIPT之创建对象Word下载.docx(9页珍藏版)》请在冰豆网上搜索。
-'
this.name);
//以"
对象.属性"
方式访问
},
myObj'
fun1'
document.writeln(this['
]
+'
this['
]);
//以集合方式访问
}
myObj.fun();
myObj.fun1();
//
结果
1-myObj
1+myObj
二、用
function
关键字模拟
class
在
中用
this
引用当前对象,通过对属性的赋值来声明属性。
如果用var声明变量,则该变量为局部变量,只允许在类定义中调用。
myClass()
this.id
5;
this.name
myclass'
;
this.getName
return
this.name;
my
myClass();
alert(my.id);
alert(my.getName());
5
myclass
三、在函数体中创建一个对象,声明其属性再返回
在函数体中创建对象可利用第一点的方法,或先
newObject();
再为各属性赋值。
不过用这种方式创建的对象在VS2008SP1中是没有智能提示的。
obj
2,
obj;
_myClass()
Object();
obj.id
1;
obj.name
_myclass'
_my
_myClass();
alert(my.name);
alert(_my.id);
alert(_my.name);
2
1
_myclass
一、定义类或对象
1.工厂方式
创建对象car
varoCar=newObject;
oCar.color="
red"
oCar.doors=4;
oCar.mpg=23;
oCar.showColor=function(){
alert(this.corlor);
创建多个car
functioncreateCar(color,doors,mpg){
vartempcar=newObject;
tempcar.color=color;
tempcar.doors=doors;
tempcar.mpg=mpg;
tempcar.showColor=function(){
alert(this.color)
};
returntempcar;
varcar1=createCar("
4,23);
varcar2=createCar("
blue"
3,25);
car1.showColor();
//outputs"
car2.showColor();
这个例子中,每次调用函数createCar(),都要创建新函数showColor(),意味着每个对象都有自己的showColor()版本,事实上,每个对象都共享了同一个函数。
有些开发者在工厂函数外定义对象的方法,然后通过属性指向该方法,从而避开这个问题。
functionshowColor(){
alert(this.color);
tempcar.showColor=
showColor;
从功能上讲,这样解决了重复创建函数对象的问题,但该函数看起来不像对象的方法。
所有这些问题引发了开发者定义的构造函数的出现。
2.构造函数方法
functionCar(sColor,iDoors,iMpg){
this.color=sColor;
this.doors=iDoors;
this.mpg=iMpg;
this.showColor=function(){
varoCar1=newCar("
varoCar2=newCar("
oCar1.showColor();
oCar2.showColor();
就像工厂函数,构造函数会重复生成函数,为每个对象都创建独立的函数版本。
不过,也可以用外部函数重写构造函数,同样,这么做语义上无任何意义。
3.原型方式
functionCar(){
Car.prototype.color="
Car.prototype.doors=4;
Car.prototype.mpg=23;
Car.prototype.showColor=function(){
varoCar1=newCar();
varoCar2=newCar();
它解决了前面两种方式存在的两个问题。
但并不尽人意。
首先,这个构造函数没有参数。
使用原型方式时,不能通过构造函数传递参数初始化属性的值,这点很令人计厌,但还没完,真正的问题出现在属性指向的是对象,而不是函数时。
考虑下面的例子:
Car.prototype.drivers=newArray("
Mike"
"
Sue"
);
oCar1.drivers.push("
Matt"
alert(oCar1.drivers);
//outputs"
Mike,Sue,Matt"
alert(oCar2.drivers);
4.混合的构造函数/原型方式
this.drivers=newArray("
"
Car.prototype.showColor=function(){
alert(this.color);
Mike,Sue"
现在就更像创建一般对象了。
所有的非函数属性都有构造函数中创建,意味着又可用构造函数的参数赋予属性默认值了。
因为只创建showColor()函数的一个实例,所以没有内存浪费。
5.动态原型方法
if(typeofCar._initialized=="
undefined"
){
Car.prototype.showColor=function(){
Car._initialized=true;
}
动态原型方法的基本想法与混合的构造函数/原型方式相同,即在构造函数内定义非函数属性,而函数属性则利用原型属性定义。
唯一的区别是赋予对象方法的位置。
6.混合工厂方式
这种方式通常是在不能应用前一种方式时的变通方法。
它的目的是创建假构造函数,只返回另一种对象的新实例。
functionCar(){
tempcar.color="
tempcar.doors=4;
tempcar.mpg=23;
与经典方式不同,这种方式使用new运算符,使它看起来像真正的构造函数。
7.采用哪种方式
如前所述,目前使用最广泛的是混合的构造函数/原型方式。
些外,动态原型方法也很流行,在功能上与前者等价,可以采用这两种方式中的任何一种。
二、修改对象
1.创建新方法
可以用prototype属性为任何已有的类定义新方法,就像处理自己的类一样。
例:
Array.prototype.indexOf=function(vItem){
for(vari=0;
i<
this.length;
i++){
if(vItem==this[i]){
returni;
retunr-1;
最后,如果想给ECMAScript中的每个本地对象添加新方法,必须在Object对象的prototype属性上定义它。
2.重定义已有方法
就像能给自己的类定义新方法一样,也可重定义已有的方法。
函数名只是指向函数的指针,因此可以轻易地使它指向其他函数。
如
Function.prototype.toString=function(){
return"
Functioncodehidden"
functionsayHi(){
alert("
hi"
alert(sayHi.toString());
Class-
类创建
Class类实现了在JavaScript中声明一个新的类,
并通过构造函数实例化这个类的机制。
通过使用Class.create()方法,
你实际上声明了一个新的类,
并定义了一个initialize()方法作为构造函数,
一旦你在这个声明的类的prototype中实现了改该方法,
你就可以使用new操作符来创建并实例化一个类。
KnowledgePrepare-
知识准备
在JavaScript中,
当你定义了一个新的函数,
而这个函数本身就相当于类的构造函数。
下面的代码向你展示了两种不同的方式来创建一个新的Person类,
而Person.prototype的定义也紧跟在函数定义之后。
varPerson=function(name){
一个匿名函数,
并将这个函数赋值给一个Person变量,
此时Person成为一个类
this.name=name;
functionPerson(name){
直接定义一个叫做Person的函数表示Person类
Person.prototype={
定义Person的prototype域
printName:
function(){
定义一个print函数
alert(this.name);
当你通过函数的方式声明了一个类之后,
你就可以通过new操作符来实例化这个类。
这样,
你就可以调用类的成员函数来完成你的逻辑。
varperson=newPerson("
JoeSmith"
使用new操作符来新建一个Person的实例,
并赋给变量person
person.printName();
person就可以看作是一个实例的引用(reference),
所以可以通过这个引用来调用Person类中的成员函数
我们来总结一下创建一个新的类的实例的整个流程和步骤:
1.
通过定义一个函数的方式(匿名或者实名)来声明一个新的类.
2.
如果有必要,
定义这个新的类的prototype域.
3.
使用new操作符紧跟你所定义的函数来创建一个新的类的实例.
一旦JavaScript编译器碰到了new操作符,
它实际上创建了一个空的类实例变量.
4.
将所有这个类的prototype域中的属性与方法复制到这个新的实例中,
并将其成员函数中所有的this指针指向这个新创建的实例.
5.
接下来,
执行紧跟在new操作符后面的那个函数.
6.
当你执行这个函数时,
如果你试图对一个不存在的属性进行赋值,JavaScript编译器将自动为你在这个实例范围内新创建这个属性.
7.
函数执行完毕后,
将这个初始化完成的实例返回.
在Prototype中,
使用Class对象,
你可以以一个比较简单的方式来声明一个新的对象。
通过使用Class.create(),prototype为你创建了一个默认的构造函数initialize(),
一旦你实现这一函数,
就可以以一个类似Java中构造函数的方式来创建一个新的类的实例。
SourceView-
源码解析
varClass={
全局静态类,
用于声明一个新的类并提供构造函数支持
create:
returnfunction(){
返回一个函数,
代表着这个新声明的类的构造函数
一个命名为initialize的函数将被这个类实现作为类的构造函数
this.initialize.apply(this,arguments);
initialize函数将在你实例化一个变量的时候被调用执行(即上面7个步骤中的第5步)
Field&
FunctionReference-
属性方法一览
Class(
静态
)
Method/Property
Kind
Arguments
Description
create()
静态方法
/
用于声明一个新的类并提供了一个名为initialize构造函数支持
Analysis&
Usage-
分析与使用
通过Class类,
你可以很容易地使用构造函数的方式创建一个新的类,
这对于Java程序员来说或许更加容易被接受。
下面我们列出了Java和JavaScript各自声明和创建一个新的类的代码对比,
我们可以看到,
他们是如此相似:
varPerson=Class.create();
类的声明
|publicclassPerson{
类的声明
|
privateStringname;
initialize:
function(name){
构造函数
publicPerson(Stringname){
构造函数
}
成员函数
publicvoidprintName(){
成员函数
System.out.println(name);
}
|}
创建实例
|Personperson=newPerson("
创建实例
函数调用
|person.printName();
函数调用
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- JAVASCRIPT 创建 对象