学习笔记之JS类.docx

上传人:b****7 文档编号:23669667 上传时间:2023-05-19 格式:DOCX 页数:11 大小:17.68KB
下载 相关 举报
学习笔记之JS类.docx_第1页
第1页 / 共11页
学习笔记之JS类.docx_第2页
第2页 / 共11页
学习笔记之JS类.docx_第3页
第3页 / 共11页
学习笔记之JS类.docx_第4页
第4页 / 共11页
学习笔记之JS类.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

学习笔记之JS类.docx

《学习笔记之JS类.docx》由会员分享,可在线阅读,更多相关《学习笔记之JS类.docx(11页珍藏版)》请在冰豆网上搜索。

学习笔记之JS类.docx

学习笔记之JS类

学习笔记之JS类

1、   创建对象:

 

 

varobj=newObject();//第一种方式。

varobj={};//第二种方法。

顺带一句可以通过vararr=[]来创建数组

 

 

2、   给对象的属性赋值

 

nahao.gender='male';

nahao.yearOfBirth=1989;

nahao.name='Topcss';//对象的属性也可以叫做对象的成员。

像普通的变量一样,JS对象的属性可以是是字符串,数组,数字,甚至可以是对象或者是函数。

 

 

3、   给对象添加方法其实对象的属性如果是函数,那么这个属性就可以叫做对象的方法

 

 

nahao.gender='male';

nahao.yearOfBirth=1989;

nahao.name='Topcss';

nahao.info=function(){

varstr='姓名:

'+

this.name+',性别:

'+

this.gender+',出生年:

'+

this.yearOfBirth;

alert(str);

}

nahao.info();

 

 

4、   我们可以使用下面的简略语法定义上面的对象:

 

 

varnahao={

gender:

'male',

yearOfBirth:

1989,

name:

'Topcss',

info:

function(){

varstr='姓名:

'+this.name+',性别:

'+this.gender+',出生年:

'+this.yearOfBirth;

alert(str);

}

};//如果调用nahao.info(),将会得到和上面一样的结果。

需要注意的是,属性之间使用逗号隔开,最后一个属性之后没有逗号。

 

 

5、构造函数构造函数可以帮助我们来缩减代码量。

首先,构造函数也是一个函数。

雏形如下:

functionPerson(){}/和定义普通的函数没有什么区别。

下面就来向Person构造函数中添加内容:

 

 

functionPerson(name,gender,yearOfBirth,site){

this.name=name;

this.gender=gender;

this.yearOfBirth=yearOfBirth;

this.site=site;

this.info=function(){

varstr='姓名:

'+this.name+',性别:

'+this.gender

+',出生年:

'+this.yearOfBirth+'网站:

'+this.site;

alert(str);

}

}//这样,构造函数就完成了。

我们现在就可以使用如下语句来定义多个对象了:

varnahao=newPerson('Topcss',male,1989,'www.javava.org);

vargaoshou=newPerson('Widen','male',1980,'');

varwudi=newPerson('不详','不知道','保密','');通过他们的方法来调用

nahao.info();

gaoshou.info();

wudi.info();

 

注意:

在上面的构造函数中,参数的名字和对象属性的名字是相同的,例如:

this.name=name;虽然这样是合法的,但是如果要定义私有属性的话就不行了(后面会提),而且看起来比较混乱。

所以最好将构造函数修改如下:

 

 

functionPerson(nameArg,genderArg,yearOfBirthArg,siteArg){

this.name=nameArg;

this.gender=genderArg;

this.yearOfBirth=yearOfBirthArg;

this.site=siteArg;

this.info=function(){

varstr='姓名:

'+this.name+',性别:

'+this.gender

+',出生年:

'+this.yearOfBirth+'网站:

'+this.site;

alert(str);

}

}

 

 

6、静态方法什么是静态方法呢?

就是直接添加在某个对象上的属性或者方法,它仅对一个对象有效,例如:

nahao.skill='会点XHTML,CSS,现在还会说JavaScript了';添加完这个语句之后,nahao就拥有了skill属性。

但是出自同一个构造函数的gaoshou和wudi却不受任何影响。

当然了,我们可以给它们也加上这个属性:

gaoshou.skill='精通HTML,CSS,JS,FLEX,PHP,.NET,Linux编程,Perl,Ruby,XXX...';

wudi.skill='能用啤酒瓶盖与沙子手工打磨出CPU等PC基本零部件。

';

同样,我们也可以给构造函数添加静态方法,但是这同样不会影响使用该构造函数定义的对象。

例如:

 

 

Person.showName=function(){

alert(this.name);

};

Person.showName();

nahao.showName();//我们给Person定义了一个showName函数,但是它只对构造函数Person本身有用(但是没有什么实际意义),如果在nahao对象上调用这个方法将会出错。

 

 

7、给对象定义私有成员公开的对象?

在前面定义的所有对象,其所有的属性都是暴露在外的,可以随便访问,甚至修改也没问题。

例如我们可以通过nahao.name直接访问到对象的名字等等属性。

如果我们希望有一个属性对外保密,就可以给对象定义私有属性:

 

 

functionPerson(nameArg,genderArg,yearOfBirthArg,siteArg,privacyArg){

……

varprivacy=privacyArg;

……

}

varnahao=newPerson('Topcss',male,1989,'www.javava.org','有10跟脚趾头');

alert(nahao.privacy);//对构造函数作出一定修改之后,我们给nahao对象添加了一个privacy属性,如果试图alert它的值的话将会显示undefined。

下面再来看看私有方法,如果我们对Person构造函数作出如下修改:

 

 

functionPerson(nameArg,genderArg,yearOfBirthArg,siteArg,privacyArg){

functioninsideOnly(){

alert('我只在对象内部可以调用!

');

}

}//那么insideOnly将不能被外部所访问,如果试图执行这个函数将会出错。

需要注意的是,私有方法并没有绑定到对象上,它的this关键字也并不指向对象。

如果需要在私有方法内引用对象,那么可以使用如下方法:

 

 

functionPerson(nameArg,genderArg,yearOfBirthArg,siteArg,privacyArg){

……

varmyOwner=this;

functioninsideOnly(){

alert(myOwner.name);

}

}//首先在构造函数中定义一个myOwner变量,将this关键字赋给它,之后就可以在私有函数里使用这个变量来访问对象本身了。

 

 

8、特权方法私有成员不能在对象的外部访问,不能访问的对象有什么用?

我们可以使用特权方法来访问这些私有属性。

所谓特权方法就是使用this关键字定义的函数,例如:

 

 

functionPerson(nameArg,genderArg,yearOfBirthArg,siteArg,privacyArg){

……

this.showPrivacy=function(){

varstr='秘密:

'+this.name+privacy+'!

';

alert(str);

};

}

varnahao=newPerson('Topcss',male,1989,'www.javava.org','有10跟脚趾头');

nahao.showPrivacy();

 

我们首先给Person构造函数添加了一个showPrivacy特权方法,方法中使用了私有变量privacy的值。

最后我们在nahao对象上调用该方法,结果如下:

 

9、prototype浅析首先,我们要否定上面这句话“对Person.prototype的修改同样会影响到使用Person定义的对象。

”请看如下代码:

 

 

Person.prototype={

mark:

'Person.Proto'

}

varnahao=newPerson('Topcss',male,1989,'www.javava.org');

Person.prototype={

mark:

'Person.NewProto'

}

alert(nahao.mark);

 

alert的输出会是什么呢?

根据上面的经验,在alert之前,对Person.prototype的最后修改将它的mark属性赋值为'Person.NewProto'。

但是实际的输出结果:

Person.Proto

这不是bug,而且各个浏览器里都一样。

原因分析如下:

 

Person.prototype={

mark:

'Person.Proto'

}

一段首先创建一个对象字面量,并且赋值给Person.prototype,我们称这个对象字面量为Proto。

 

varnahao=newPerson('Topcss',male,1989,'www.javava.org');

 

在创建nahao对象并且按照构造函数初始化对象的同时,会悄悄给nahao对象设置一个内部属性,我们暂且将其命名为xxx,并且将其赋值为Person.prototype的值,也就是上面提到的对象字面量Proto,JavaScript的动态继承也就是由这个xxx实现的。

(这个JavaScript的内部实现机制不是我拍脑门想出来的,是Netscape的工作人员的一篇文章里提到的,下面也会用程序来证明这个流程。

)然后,

 

 

Person.prototype={

mark:

'Person.NewProto'

}

 

这里我们将创建另外一个对象字面量NewProto,并且赋值给Person.prototype。

到这里就很明显了,尽管我们修改了Person.prototype,但是并没有影响到nahao对象。

当我们访问nahao.mark的时候,它首先在自己内部找,找不到就会去找xxx,自然就找到了Proto,而非NewProto。

那么xxx这个实现动态继承的关键究竟是什么呢?

在FireFox中它是__proto__,有以下代码为证。

至于在IE中xxx是什么我还没找到。

 

 

Person.prototype={

mark:

'Person.Proto'

}

varnahao=newPerson('Topcss','male',1989,'');

nahao.prototype={

mark:

'Person.NewProto'

}

alert(nahao.mark);

alert(nahao.__proto__.mark);//两次alert的结果都是一样的,都是Proto。

 

alert(nahao.__proto__===Person.prototype);//结构为true。

 

以上代码经过测试适用于FireFox和chrome。

NetScape应该也可以,IE不行。

个人观点:

Person.prototype={}的方式最好只在定义构造函数的时候使用一次,而且要紧跟着构造函数写,以后修改prototype的时候都使用Person.prototype.protertyA=‘valueA’的形式。

 

 

10、   最后的构造函数我们在上面看到了定义对象,以及设这和修改其属性的各种方法,我们可以在构造函数中定义属性,可以在对象外部定义(静态)属性,也可以在对象的prototype中定义属性。

下面是我使用的大致格式:

 

 

functionPerson(nameArg,genderArg,yearOfBirthArg,siteArg,privacyArg){

//公有属性

this.name=nameArg;

this.gender=genderArg;

this.yearOfBirth=yearOfBirthArg;

this.site=siteArg;

//私有属性

varprivacy=privacyArg;

//特权方法

this.showPrivacy=function(){

};

}

Person.prototype={

//公有方法

info:

function(){

},

func:

function(){

}

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 表格模板 > 合同协议

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1