软件定制 成功研发:ERP系统,OA系统,CRM系统,进销存,外贸进销存销售系统,项目管理系统 

 
 

首   页  |  成功案例  |  关于我们  |  软件产品  |  软件定制  |  编程知识  |  行业知识  |  WEB开发  |  联系我们

 
     
令人惊奇的JavaScript面向对象  
 

  <p>接下来我为大家介绍一下JavaScript中的一些重要的面向对象特性或者基本的概念。(注意,我说的是面向对象&ldquo;特性&rdquo;,我并没有认为JavaScript是一门面向对象语言,但是它确确实实有面向对象语言方面的一些特性,这是值得我们利用的。)<br/>
<br/>
1.成员变量。照例先看一段代码<br/>
<br/>
1functionTestClass()<br/>
2{<br/>
3//&ldquo;私有&rdquo;成员变量<br/>
4varval1;<br/>
5//&ldquo;公有&rdquo;成员变量<br/>
6this.val10;<br/>
7<br/>
8//验证<br/>
9alert(val);<br/>
10alert(this.val);<br/>
11};<br/>
12<br/>
13//声明一个对象<br/>
14vartestnewTestClass();<br/>
15//只能访问到公有成员<br/>
16alert(test.val);<br/>
<br/>
ok,现在让我们看看什么是&ldquo;公有&rdquo;什么是&ldquo;私有&rdquo;。虽然大牛大虾们可能会不屑一顾,但是仍然写出来给大家提个醒,毕竟JavaScript这种定义类的方式有时候会让人摸不着头脑。<br/>
<br/>
我原来的理解是这样的:如果用这个function来声明一个对象,这时候第4行val变量定义的上下文为构造函数内部,实际上是一个局部变量(大家看到这里先保留一下,后面大家会有其他认识)。而第6行声明的val上下文是对象内部,所以我们可以把它看成是成员变量。构造函数的最后两个alert验证了两个变量是属于不同上下文的变量。第16行的alert像我们展示了this.val这种形式声明的是一个公有的变量,因为我们可以通过对象从外部直接访问到它。至于为什么还有&ldquo;私有&rdquo;变量一说,请大家移步看下一个例子,第4行val的声明不仅仅是&ldquo;局部变量&rdquo;这么简单。<br/>
<br/>
另外再唠叨一下,虽然和本文没多大关系:如果把function当成函数调用的话,第6行的上下文就是window对象,也即声明的是一个全局变量。<br/>
<br/>
2.成员函数。只要理解了上述&ldquo;公有&rdquo;变量的定义方法,定义成员函数也成了顺理成章的事情。<br/>
<br/>
1functionTestClass()<br/>
2{<br/>
3//&ldquo;私有&rdquo;成员变量<br/>
4varval1;<br/>
5//&ldquo;公有&rdquo;成员变量<br/>
6this.val10;<br/>
7<br/>
8//定义两个成员函数<br/>
9this.getPrivateValfunction(){<br/>
10//返回&ldquo;私有&rdquo;变量<br/>
11returnval;<br/>
12}<br/>
13this.getPublicValfunction(){<br/>
14//返回&ldquo;公有&rdquo;变量<br/>
15returnthis.val;<br/>
16}<br/>
17};<br/>
18<br/>
19//声明一个对象<br/>
20testnewTestClass();<br/>
21//两种变量都可以通过函数获取<br/>
22alert(test.getPrivateVal());<br/>
23alert(test.getPublicVal());<br/>
<br/>
你可以看到,实际上所谓的&ldquo;成员函数&rdquo;其实就是上一点讲到的&ldquo;公有&rdquo;变量,仅仅是因为其类型是&ldquo;function&rdquo;而已。不过这一点可是需要牢记的东西,记住了才不会在书写JS代码的时候还用Java或者C++的风格去定义一个成员函数。<br/>
<br/>
至于上一点中提到的&ldquo;私有&rdquo;变量的问题,可以看看getPrivateVal函数的定义以及其调用运行的结果。是不是很神奇?构造函数中的局部变量居然可以在构造函数之外&ldquo;存活&rdquo;?又一个等待大牛大虾解决的问题呵呵~希望很快就能得到答复!<br/>
<br/>
Anyway,我们可以把它当成&ldquo;私有&rdquo;变量使用。<br/>
<br/>
ok,另外还有一种大家熟知的定义&ldquo;可继承&rdquo;函数的方法<br/>
<br/>
functionTestClass()<br/>
{<br/>
//&ldquo;私有&rdquo;成员变量<br/>
varval1;<br/>
//&ldquo;公有&rdquo;成员变量<br/>
this.val10;<br/>
};<br/>
//定义一种可供&ldquo;继承&rdquo;的方法<br/>
TestClass.prototype.getValfunction(){<br/>
returnthis.val;<br/>
}<br/>
<br/>
//声明一个对象<br/>
testnewTestClass();<br/>
alert(test.getVal());<br/>
<br/>
<br/>
通过原型对象定义的方法。当然,这也是一种&ldquo;公有&rdquo;的方法。这样的定义方法更加受到欢迎。<br/>
<br/>
在《精通JavaScript》一书中,把前一种方法称为&ldquo;特权方法&rdquo;,后一种方法才叫做&ldquo;公有方法&rdquo;。这两种方式定义的方法主要有两方面的差异,一个是继承特性,另一个是对构造函数中声明的变量(之前提到&ldquo;私有&rdquo;变量)访问的权限。</p>



 

知识库

 








首 页 | 成功案例 | 关于我们 | 软件产品 | 软件定制 | 代理合作 | 售后服务 | 在线演示 | 联系我们

业务QQ:在线客服  技术QQ:在线技术支持 MSN:
Copyright (C) 深圳市凯路网络技术有限公司
粤ICP[07018848]号
软件知识 行业最新信息 编程技巧等尽在这里