由浅到深了解JavaScript类(3)
作者:泣红亭 来源:无忧脚本 发布时间:2008-06-16 13:20:00
静态方法
与静态属性相似,它也有个另称:公共方法,同样属于类本身的。
静态方法的定义方式是:
类名.方法名 = function(参数1,参数2...参数n)
{
//方法代码
}
我们现在就来定义一个无忧用户类的注册新用户静态方法:
WuYouUser.prototype.AddOne = function()
{
//*** 同样具体代码不写出来,给静态属性Count增加1,表示注册用户数量又多一个
WuYouUser.prototype.Count++;
}
现在我们来看看如何用它,同样有两种方法:
1.直接使用WuYouUser.prototype.AddOne()
2.使用某实例的AddOne()
这两种方法没有什么不同
var Wo = new WuYouUser();
var Biyuan = new WuYouUser();
document.write(WuYouUser.prototype.Count); // 0
Wo.AddOne();
document.write(WuYouUser.prototype.Count); // 1
document.write(Wo.Count); // 1
document.write(Biyuan.Count); // 1
WuYouUser.prototype.AddOne();
document.write(WuYouUser.prototype.Count); // 2
document.write(Wo.Count); // 2
document.write(Biyuan.Count); // 2
可以看出不管是使用Wo.AddOne()还是WuYouUser.prototype.AddOne()效果都是一样的,都是给WuYouUser.prototype.Count加上1
现在再看一段代码
function NewClass() //由于上边的WuYouUser类不合适当这个例子的代码,我声明了一个新类NewClass
{
this.Name = "泣红亭"; //这里默认值为我的名字
}
NewClass.prototype.ChangeName = function(NewName)
{
this.Name = NewName;
}
var Wo = new NewClass();
Wo.ChangeName("郑运涛"); //我的真名
可以看到Wo.Name确实已经变成了"郑运涛",这个方法似乎是可以用的,但里边是不是内有天机呢?
再看下边的代码,类的定义以及ChangeName的定义我们照样,但改变一下下边的代码:
NewClass.prototype.ChangeName("郑运涛");
document.write(NewClass.Name); //undefined,即未定义
document.write(NewClass.prototype.Name); //郑运涛
var Wo = new NewClass();
document.write(Wo.Name); //泣红亭
可以看到我们并没有定义NewClass.prototype.Name这个静态属性,但编译器给我们自己加了一个。
可是再看下边输出Wo.Name,它并不是为"郑运涛",而是原来的默认值"泣红亭",说明了什么?
其实很简单,看一下NewClass的定义里已经有Name这个属性,因此Wo也有自己的Name属性,它跟NewClass.prototype.Name并不是同一个的,因此就还是那样子。
那为什么前一个例子运行了Wo.ChangeName("郑运涛")却能够实现改变Wo.Name属性呢?其实在这里跟改变Wo.Count的值是同一个道理,编译器自动给Wo增加了一个方法ChangeName,这个方法代码与NewClass.prototype.ChangeName一样,但Wo.ChangeName是Wo这个实例所特有的,而非NewClass.prototype.ChangeName!
分析可知道在静态方法里尽量不要使用this这样的关键字来引用实例本身的属性,除非你有特别的目的,而且能够清楚地明白这里边的运行机制!
如果真的需要在静态方法里使用this,可以直接把this当作参数传进去:
NewClass.ChangeName = function(This,NewName) //注意这里是This,不是this
{
This.Name = NewName;
}


猜你喜欢
- 好久没有更新博客了,今天看到论坛上有位朋友问起全屏布局,有点像vc的界面。来了兴趣,就写了一个。运用IE6的怪异模式,通过绝对定位来实现的。
- 随着MySQL数据库存储的数据逐渐变大,已经将原来的存储数据的空间占满了,导致mysql已经链接不上了。因此,必须要给存放的数据换个地方了。
- Static files管理static files指一些用到的像css,javascript,images之类的文件。在开发阶段:1.在s
- 如题,首先读取视频路径,其次根据视频名称创建对应的文件夹,再逐帧将视频帧读入。import cv2import argparseimport
- Python爬取网页信息的步骤以爬取英文名字网站(https://nameberry.com/)中每个名字的评论内容,包括英文名,用户名,评
- 工具python3.7PycharmPDFPyPDF2reportlab从PDF中提取文本PyPDF2没有办法从PDF文档中提取图像、图表或
- 每次和朋友聊天苦于没有表情包,而别人的表情包似乎是取之不尽、用之不竭。作为一个程序员哪能甘愿认输,于是做了一个表情包下载器供大家斗图。首先,
- 问题:我们每天都要编写一些Python程序,或者用来处理一些文本,或者是做一些系统管理工作。程序写好后,只需要敲下python命令,便可将程
- 前言昨天,因为项目需求要添加表的更新接口,来存储预测模型训练的数据,所以自己写了一段代码实现了该功能,在开始之前,给大家分享python 操
- 一、概论C4.5主要是在ID3的基础上改进,ID3选择(属性)树节点是选择信息增益值最大的属性作为节点。而C4.5引入了新概念“信息增益率”
- 本文实例为大家分享了Python3连接MySQL模拟转账的具体实现代码,供大家参考,具体内容如下# coding:utf8import sy
- 如下所示:def translationCipher(msg,key): result = ["&quo
- Elastic Security 为分析人员提供了预防,检测和响应威胁的手段。 该解决方案解决了SIEM,endpoint,威胁搜寻等安全用
- 一、数据库设计三范式相关知识说明1、什么是设计范式?设计表的依据,按照这三个范式设计出来的表,不会出现数据的冗余。2、为什么要学习数据库的三
- 当然首先得去下载ASPupload 程序,安装后使用!官方网站下载:http://www.aspupload.com/使用ASP实现文件上载
- 前言:我们想要在爬虫中使用xpath、beautifulsoup、正则表达式,css选择器等来提取想要的数据,但是因为scrapy是一个比较
- 该需求是一个真实的实战需求,如果你的公司在做题库类的系统,一定会涉及该方面的内容,所以收藏起来吧。需求简单描述如下所示:1.提取 Word(
- 闭包闭包就是能够读取其他函数内部变量的函数。def test1(k, b): def test1_1(x): &n
- SQLAlchemy是Python编程语言下的一款开源软件,提供了SQL工具包及对象关系映射(ORM)工具,使用MIT许可证发行。SQLAl
- 他们是如何不让我的Teleport和Webzip工作的?你也可以做得到哦: <%dim UserAgentUser