📄 day4_6.html
字号:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312-80">
<style type="text/css">
<!--
a:link { color: blue; text-decoration: none}
a:visited { color: purple; text-decoration: none}
a:hover { color: #CC0033; text-decoration: underline}
-->
</style>
<title>JavaScript高级教程</title>
<script language="JavaScript">
<!-- hide me
// timedAlert
// this just calls a
function timedAlert()
{
var the_timeout = setTimeout("alertAndRedirect();", 3000);
}
function alertAndRedirect()
{
alert('OK! Exhale!');
window.location.replace("day3_2.html");
}
// show me -->
</script>
</head>
<body topmargin="1" leftmargin="2">
<table border="0" width="591" cellspacing="0">
<tr>
<td bgcolor="#ffff99" width="451">JavaScript高级教程 - 第四课</td>
</tr>
<tr>
<td bgcolor="#FF6600" width="451"><a href="mailto:thau@wired.com">Thau</a></td>
</tr>
</table>
<div align="left">
<table border="0" width="630" cellspacing="0">
<tr>
<td width="458" valign="top" align="left" rowspan="2"><small><small><br>
</small></small><strong>第六页:创建你自己的对象</strong>
<p>对象的概念使你能够以一种更易理解的方式去组织你的信息。让<br>
我们从创建一个雇员数据库的简单例子开始,然后利用我们课程<br>
里学到的东西去实现一个比这复杂得多的,和我们的生活有关<br>
的事:编写一个<font face="verdana, arial, geneva, sans-serif">JavaScript</font>虚拟宠物。</p>
<p> <font face="verdana, arial, geneva, sans-serif"></font>为了这个练习,让我们先不管如何把现代资本主义社会工人进行<br>
对象化的方方面面,我们把每一个雇员当作一个具有属性与方法<br>
的对象。每一个雇员有一个名字,职务,薪水,生日,地址等<br>
属性。雇员可以被提升,去休假,换部门或者去下厨等。对象包<br>
括了所有这些信息,而雇员对象就象是一个模板。每个雇员都有<br>
这些属性如姓名,职务等,是属性值的不同使得不同的雇员得以<br>
区分开来。</p>
<p> <font face="verdana, arial, geneva, sans-serif"></font>要创建你自己的对象,你需要从模板开始。在面向对象编程中模<br>
板也称为对象的构造器。一旦你建立了模板,你就可以创建对象<br>
的实例,就象这样:</p>
<pre>
<font face="verdana, arial, geneva, sans-serif"></font>
<font face="verdana, arial, geneva, sans-serif">var fred = new Employee("Fred Flintstone", 33, "Surface Miner", 20000);
var barney = new Employee("Barney Rubble", 33, "Slacker", 40000);
var boss = new Employee("Mr. Slate",50, "CEO", 1000000);
</font></pre>
<p> <font face="verdana, arial, geneva, sans-serif"></font>如果这几个实例已被创建,你可以做这些事情:</p>
<blockquote>
<pre>
<font face="verdana, arial, geneva, sans-serif"></font>
<font face="verdana, arial, geneva, sans-serif">barney.promotion("Chief Slacker","10");
fred.fired();
boss.vacation(365);
</font></pre>
</blockquote>
<p> <font face="verdana, arial, geneva, sans-serif"></font>这样就把<font face="verdana, arial, geneva, sans-serif">Barney</font>提升为‘首席懒鬼’并增加<font face="verdana, arial, geneva, sans-serif">10%</font>的薪水,炒掉<br>
<font face="verdana, arial, geneva, sans-serif">Fred</font>,让首席执行官休上一年的假。</p>
<p> <font face="verdana, arial, geneva, sans-serif"></font>当然你得自己从属性开始编写对象构造器和方法,这里是雇员的<br>
构造器:</p>
<blockquote>
<pre>
<font face="verdana, arial, geneva, sans-serif"></font>
<font face="verdana, arial, geneva, sans-serif">function Employee(name, age, title, salary)
{
this.name = name;
this.age = age;
this.title = title;
this.salary = salary;
}
</font></pre>
</blockquote>
<p> <font face="verdana, arial, geneva, sans-serif"></font>请注意构造器其实就是一个函数。在函数中我们需要给<br>
<font face="verdana, arial, geneva, sans-serif"><tt>this.property_name</tt></font>赋值,我们不直接给<font face="verdana, arial, geneva, sans-serif">age</font>赋值,而是给<font face="verdana, arial, geneva, sans-serif"><tt>this.age</tt></font><br>
赋值,对姓名,职务等也一样。</p>
<p> <font face="verdana, arial, geneva, sans-serif" size="3"></font><font size="3">你可以给构造函数传递参数
,当象下面这个语句这样调用构造函<br>
数时:<br>
<br>
</font><font face="verdana, arial, geneva, sans-serif" size="2">var
barney = new Employee("Barney Rubble", 33, "Slacker",
40000);</font><font face="verdana, arial, geneva, sans-serif" size="3"><br>
</font></p>
<p> <font face="verdana, arial, geneva, sans-serif" size="3">... </font><font size="3">然后在构造函数中的这条语句:</font></p>
<font size="3">
<blockquote>
<pre>
<font face="verdana, arial, geneva, sans-serif"></font>
<font face="verdana, arial, geneva, sans-serif">this.name = name;
</font></pre>
</blockquote>
<p> <font face="verdana, arial, geneva, sans-serif">... </font>我们就把这个雇员的名字设成了传递给雇员构造函数的参数<br>
的值。</p>
<p> <font face="verdana, arial, geneva, sans-serif"></font>构造函数中使用的 <font face="verdana, arial, geneva, sans-serif">"this"
</font>关键字的原因是你可能一次创建多个雇<br>
员实例。 为了让方法和构造函数正确工作,必须 清楚地告诉它<br>
们到底是在对哪个雇员进行操作。这里的<font face="verdana, arial, geneva, sans-serif">"this"</font>所指的是
<font face="verdana, arial, geneva, sans-serif">is: </font>你<br>
正在创建的实例。下面我们讲讲方法的例子或许能让你理解得<br>
更好。</p>
<p> <font face="verdana, arial, geneva, sans-serif"></font>方法只不过是加在对象上的函数。首先定义函数,然后把函数加<br>
载到对象上(在对象的构造函数中)我们以<font face="verdana, arial, geneva, sans-serif"><tt>promotion()</tt>
</font>方法<br>
为例:</p>
<blockquote>
<pre>
<font face="verdana, arial, geneva, sans-serif"></font>
<font face="verdana, arial, geneva, sans-serif">function promotion(new_title,percent_raise)
{
var salary_increase = this.salary * percent_raise;
this.salary = this.salary + salary_increase;
this.title = new_title;
}
</font></pre>
</blockquote>
<p> <font face="verdana, arial, geneva, sans-serif"></font>这个函数计算雇员的新工资并把新工资和新职位赋给雇员。<br>
<font face="verdana, arial, geneva, sans-serif">JavaScript</font>通过使用<font face="verdana, arial, geneva, sans-serif">"this"</font>关键字知道你说的是哪个雇员,所以如<br>
果有这个语句:</p>
<blockquote>
<pre>
<font face="verdana, arial, geneva, sans-serif"></font>
<font face="verdana, arial, geneva, sans-serif">barney.promotion("Chief Slacker",10);
</font></pre>
</blockquote>
<p> <font face="verdana, arial, geneva, sans-serif"></font>那 <font face="verdana, arial, geneva, sans-serif">"this"</font>就是指
<font face="verdana, arial, geneva, sans-serif">is Barney. </font>这看起来确实有一点怪异,可能要<br>
一段时间去适应它,但是一旦你开始以对象的眼光去思考,你马<br>
上就能养成习惯了。</p>
<p> <font face="verdana, arial, geneva, sans-serif"></font>创建对象的最后一步就是把方法连到对象上。我刚才提到了,你<br>
要在构造函数中做这个。你写完提升方法后,如果要把它连到雇<br>
员对象上,就在构造函数里加上:</p>
<blockquote>
<pre>
<font face="verdana, arial, geneva, sans-serif"></font>
<font face="verdana, arial, geneva, sans-serif">this.promotion = promotion;
</font></pre>
</blockquote>
<p> <font face="verdana, arial, geneva, sans-serif"></font>下面是增加了提升方法的构造函数:</p>
<blockquote>
<pre>
<font face="verdana, arial, geneva, sans-serif"></font>
<font face="verdana, arial, geneva, sans-serif">function Employee(name, age, title, salary)
{
this.name = name;
this.age = age;
this.title = title;
this.salary = salary;
this.promotion = promotion;
}
function promotion(new_title,percent_raise)
{
var salary_increase = this.salary * percent_raise;
this.salary = this.salary + salary_increase;
this.title = new_title;
}
</font></pre>
</blockquote>
<p> <font face="verdana, arial, geneva, sans-serif"></font>如要增加其它信息,比如雇员的办公室,可以增加一个名为<br>
<font face="verdana, arial, geneva, sans-serif">"office"</font>的属性。然后如果你想记录雇员换办公室的情况,你就创<br>
建一个<font face="verdana, arial, geneva, sans-serif"><tt>transfer()</tt></font>方法<font face="verdana, arial, geneva, sans-serif">.
</font></p>
</font>
<p><font size="3"> <font face="verdana, arial, geneva, sans-serif"></font>明白了吗<font face="verdana, arial, geneva, sans-serif">?
</font>现在来看看更复杂和重要的面向对象的<font face="verdana, arial, geneva, sans-serif">JavaScript,
</font>去<br>
创建一个虚拟宠物。<a href="day4_7.html">>></a></font></p>
<p align="left"><font face="宋体" size="3" color="#000000"><strong>JavaScript高级教程</strong></font><font color="#FF0000" face="宋体" size="3"><br>
</font><font size="3"><font color="#FF3300">第一页</font> <a href="day4_1.html"><font face="verdana, arial, geneva, sans-serif">JavaScript</font>高级教程<font face="verdana, arial, geneva, sans-serif">-
</font>第<font face="verdana, arial, geneva, sans-serif">4</font>天</a>
<br>
<font color="#FF3300">第二页 </font><a href="day4_2.html">图象映射与<font face="verdana, arial, geneva, sans-serif">JavaScript</font></a><font face="verdana, arial, geneva, sans-serif"><br>
</font><font color="#FF3300">第三页 </font><a href="day4_3.html">预装图象 -
是什么<font face="verdana, arial, geneva, sans-serif">?</font></a><font face="verdana, arial, geneva, sans-serif"><br>
</font><font color="#FF3300">第四页 </font><a href="day4_4.html">预装图象 -
怎么做?</a><font face="verdana, arial, geneva, sans-serif"><br>
</font><font color="#FF3300">第五页 </font><a href="day4_5.html">对象的优点</a><br>
<font color="#FF3300">第六页 </font>创建你自己的对象<br>
<font color="#FF3300">第七页 </font><a href="day4_7.html">你的面向对象的虚拟宠物</a><br>
<font color="#FF3300">第八页 </font><a href="day4_8.html">计算字符串</a><br>
<font color="#FF3300">第九页 </font><a href="day4_9.html">获取难以索引的对象</a><br>
<font color="#FF3300">第十页 </font><a href="day4_10.html">另一种获取难以索引的对象的手段</a><br>
<font color="#FF3300">第十一页 </font><a href="day4_11.html">第四天课程复习</a></font></p>
<p>[<a href="day1_1.html">第1课</a>][<a href="day2_1.html">第2课</a>][<a href="day3_1.html">第3课</a>][第4课][<a href="day5_1.html">第5课</a>]</p>
<hr align="left">
<!--webbot bot="Include" U-Include="../../copyright.html" TAG="BODY" startspan -->
<p><font face="verdana, arial, geneva, sans-serif" size="2"><a href="http://phtshop.yeah.net" target="_top">本文根据
网猴 相关文章改编,版权归原作者所有。</a> </font><font color="#000000"><span class="smallfont"></span></font></p>
<!--webbot bot="Include" endspan i-checksum="15926" --> </td>
</tr>
<tr> </tr>
</table>
</div>
</body>
</html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -