因为大家总是用面向过程的编程思想来写JS代码,而且也由于网络上充斥了太多小“巧”的JS代码段,很多都是随意而为,很不规范,这也就造成了大家对JS的“误解”,一味的认为它就是一个辅助的小东东,而不适合做大的东西开发。但是自从AJAX兴起后,大量的JS代码编写要求人们具备像写JAVA类似的代码一样,能够面向对象进行开发。
所以下面就结合我自己的体会和所学习的东东和大家一起来学习在JS中如何使用面向对象的编程。其实使用JS进行面向对象开发也不是很难的事情,因为在JS中每一个function就是一个对象,比如如下一个函数:
复制代码 代码如下:
function HelloWorld()
{
alert('hello world!');
}
那么我们在使用的时候就可以把它当成一个对象来使用,比如使用如下的测试函数:
复制代码 代码如下:
function _test()
{
var obj = new HelloWorld();
}
那么在调用_test方法后就会弹出hello world!的提示框,也就是调用了HelloWorld()对象(函数)。在这里HelloWorld这个对象没有任何属性和方法,它只有一个构造方法HelloWorld(),我们可以把它想象成JAVA中的一个没有任何属性和方法的类,当使用new进行对象创建的时候,就调用了它的构造方法。这也是我们最简单的对象了,当然了,一个对象肯定是要赋予它属性和方法的,在JS中我们使用prototype原型关键字进行赋值,比如我要给HelloWorld对象增加一个sayHello方法和一个name属性,那么就可以这样添加:
复制代码 代码如下:
HelloWorld.prototype = {
name : 'JavaScript',
sayHello : function() {
alert(this.name);
}
}
那么就可以为HelloWorld添加了一个name属性和sayHello方法,我们再改一下_test方法,如下:
复制代码 代码如下:
function _test()
{
var obj = new HelloWorld();
obj.sayHello();
}
那么调用_test方法后就会先后打印hello wordl!和JavaScript(一个是构造方法中的alert,一个是sayHello方法中的alert)。注意sayHello方法中的alert引用了this关键字,该关键字表示的就是HelloWorld对象,即默认指向该对象,和JAVA中的this关键字一样。
对于向一个对象添加实例方法和属性,我们可以采用上述的方式,即使用prototype关键字进行赋值,格式如下:
对象名称.prototype = {
属性一 : 属性值,
属性二 : 属性值,
方法一 : function(参数列表) {
方法体;
},
方法二 : function(参数列表) {
方法体;
}
}
可以按照如上方式对一个对象进行多个属性和方法的定义,这样在new一个对象后,就可以使用实例名称.属性或方法来获取属性或执行方法了。
在上面的方法中,大家不知道发现没有对象的属性是可以直接访问的,比如访问HelloWorld对象的name属性就可以使用obj.name直接获取。这就好比我们JAVA中的公有属性了,而且我们还可以直接对name属性进行赋值操作。所以现在有一个问题了,我们如何给一个对象赋一个私有成员变量呢?那我们就可能要改一下HelloWorld类的声明方式了,不使用prototype进行类的属性和方法声明,而是直接使用内嵌函数和属性进行声明,修改的HelloWorld如下,我们命名为HelloWorld2:
复制代码 代码如下:
function HelloWorld2()
{
var privateProp = 'hello world 2!';
this.method = function() {
alert(privateProp);
}
}
看到HelloWorld2的类申明方式了没?是直接在函数内部进行了函数嵌套申明,而且我们还设置了一个局部变量privateProp,即我们的私有成员变量,该变量只能被HelloWorld2内部的函数进行访问,外部访问是不允许的,这样我们就可以通过使用变量的作用域来巧妙的设置类的私有变量了。我们应用如下:
复制代码 代码如下:
function _test2()
{
var obj2 = new HelloWorld2();
obj2.method(); // 调用该方法将打印'hello world 2!
alert(obj2.privateProp); // 将打印undefined
}
上面所说的都是如何定义一个类,以为如何为一个类定义属性和方法,由于采用prototype方式进行定义清晰明了,所以一般都是使用该方式进行类的定义,而且现在很多AJAX框架中都使用了类似的类声明方式。而且类的私有成员变量却只能在类的构造方式中的函数进行访问,这样类的prototype声明的方法就不能访问该私有成员变量了,而且可读性方面也没有prototype方式好。
好了,上面所说的都是定义一个类的实例方法和属性。在JAVA中类有实例方法和属性与类方法和属性之分。所谓类属性和方法就是该类的所有实例都只维护一份类属性和类方法的副本,而不是每个实例都维护一套,这和实例属性和实例方法是不一样的。那么在JS中如何为一个类定义静态类方法和类属性呢?我们可以直接为类添加静态属性和静态方法,比如为HelloWorld类添加一个age的静态属性和一个hello的静态方法,那么声明如下:
复制代码 代码如下:
HelloWorld.age = 22;
HelloWorld.hello = function() {
alert(HelloWorld.age);
}
那么这样就为类HelloWorld声明了静态属性age和静态方法hello了。在使用的时候就直接使用类名进行访问了,但是不能使用实例进行访问,这点与JAVA中的是一致的,测试如下:
复制代码 代码如下:
function _test()
{
var obj = new HelloWorld();
obj.sayHello(); // 正确,实例方法,可以通过实例进行访问
HelloWorld.hello(); // 正确,静态方法,通过类名进行直接访问
obj.hello(); // 错误,不能通过实例访问静态方法。会报JS错误!
}
通过以上的说明,相信大家对JS进行面向对象编程有了一定的了解,而且也一定蠢蠢欲动了吧,呵呵,大家不妨试试哦~~(注:以上代码全部通过测试!)
相关推荐:
OpenAI智能诊断医疗-开启精准医疗新纪元,跟侯维静学ai
SEO到底怎么做?揭秘从零到精通的完整SEO优化攻略,鸟瞰ai
SEO找词:如何精准找到高效关键词,提升排名和流量,河源网站优化平台
seo运营经理是什么,seo和运营的区别 ,皖妍ai宁慕晴o
SEO提高:如何通过精准优化让网站流量翻倍,优化排名seo加盟费用
ChatGPT坏了用什么?替代方案,满足你的智能对话需求,星际一的ai
为什么选择收录网站是企业在线营销的必备策略,全网营销与推广
GPT在智能聊天机器人中的作用:重塑沟通体验,开创智能未来,百万级ai
ChatGPT打不开网页?看完这篇你就懂了!,国内ai写作安卓软件
seo的推广工具,seo推广软件哪个好 ,国内ai写作论文怎么样
AI自动生成:开启智能时代的无限可能,ai熊熊图片
什么叫改写-解读“改写”背后的艺术与技巧,网站制作建设模板图片
【BVIP尊享体验:超越奢华,开启专属未来】,珠宝网站建设思路
ChatGPT5.0为什么一直没出来?背后的技术与战略,元宵节ai趣赏月
ChatGPT免费订阅的使用限制:其潜力与挑战,ai辅助线无法对齐画板
seo软件是什么职位,seo用的是什么软件 ,ai感知树
ChatGPT3.5需要登录使用吗?AI使用的真相!,电脑版写作ai推荐怎么关闭
优化投入,让企业更具竞争力,怎样推广营销方案
“多网建站”助力企业跨越发展,开启全新数字化时代,海南网站优化电池
为什么seo这么麻烦,seo是什么意思 为什么要做seo ,dota1ai地图命令选ai
ChatGPT手机下载后打不开?可能是这些问题导致的,解决方法在这里!,孤城ai动画
用AI写文章,释放你的创作潜力!
为什么做seo矩阵项目,为什么做seo矩阵项目不能做 ,怎么用ai写作
SEO详解:如何优化你的网站提升排名,获得更多流量,伊春湖南网站优化推广
SEO要求:如何优化网站提升搜索引擎排名,助力企业获取更多流量,鹤山区网站运营推广
SEO能给企业带来什么价值,seo的影响 ,ai蓝衣美女
seo需要会什么,seo要会些什么 ,ai313414919
SEO全套秘籍:提升网站流量与排名的终极指南,荣昌手机网站建设
《SEO教材:打造网站流量的核心利器,教你轻松SEO优化技巧》,咖啡网站建设总结文案
SEO优化如何进行:提升网站排名,轻松超越竞争对手,ai写作怎么操作手机
AI网页生成:轻松构建智能网站,提升品牌竞争力,杭州专业ai智能教育
SEO中权重是什么意思?让你迅速网站排名的核心秘密!,长颈鹿智能AI点读机
“扩写AI”-引领写作革命,开启智能创作新时代,dede seo 标题如何填写
ChatGPT全球宕机:人工智能的崩塌与未来的挑战,中国ai和美国ai教父
SEO北京:数字时代,企业成功的关键,湖南网站建设湖南岚鸿
《命运交错的轨迹:小说背后的无尽魅力》,seo优化huifachina
创作新时代:自动生成文章AI的魅力与未来
SEO查:如何用精准的SEO诊断助力网站流量爆发,美团关键词排名怎么补
SEO查看-如何通过精确分析提升网站流量与排名,东丽网站建设价格
企业SEO:如何通过搜索引擎优化提升企业网络竞争力,安阳网站优化布局设计
OpenAI银联支付-未来支付新体验,安全便捷全新升级,医学加ai
SEO搜索关键词是什么意思?全方位解析关键词优化的核心要素,lol ai图片
SEO抓取:让您的网站从零到一的秘诀,佛山网站建设哪家效果好
ChatGPT在处理文本时可能无法完全理解上下文的复杂性,肌肉ai
seo要会些什么,seo需要学些什么内容 ,轻盈ai
SEO外,如何提升网站整体营销效果?,文轩网络营销推广方案
ChatGPT怎么打不开了?揭秘背后的原因与解决方法,ai中打开ai文件丢失
优化工具:提升工作效率的秘密武器,网站模板的优化策略是什么
ChatGPT无法访问原因分析及解决方案,斑马ai报道
为什么要seo排名,为什么要做seo推广 ,AI写作开启创意新世界