6.JS面向对象基础(*)
JavaScript中没有类的语法,是用函数闭包(closure)模拟出来的,下面讲解的时候还是用C#中的类、构造函数的概念,JavaScript中String、Date等“类”都被叫做“对象”,挺怪,方便初学者理解,不严谨。JavaScript中声明类(类不是类,是对象):
-
<script type="text/javascript">
-
function Person(name, age) {
-
this.name = name;
-
this.age = age;
-
this.SayHello = function () {
-
alert("你好,我是" + this.name + ",我" + this.age + "岁了");
-
}
-
}
-
var p1 = new Person("tom", 20);
-
p1.SayHello();
-
</script>
必须要声明类名,function Person(name,age)可以看做是声明构造函数,Name、Age这些属性也是使用者动态添加了。var p1 = Person("tom", 30);//不要丢了new,否则就变成调用函数了,p1为undefined。new 相当于创建了函数的一个实例
7.Array对象
JavaScript中的Array对象就是数组,首先是一个动态数组,而且是一个像C#中数组、ArrayList、Hashtable等的超强综合体。
-
<script type="text/javascript">
-
var names = new Array();
-
names[0] = "tom";
-
names[1] = "jerry";
-
names[2] = "lily";
-
for (var i = 0; i < names.length; i++) {
-
alert(names[i]);
-
}
-
</script>
输出:分别弹出tom,jerry,lily
无需预先制定大小,动态。
7.1 练习:
求一个数组中的最大值。定义成函数。
-
<script type="text/javascript">
-
function getMax(arr) {
-
var max = arr[0];
-
for (var i = 0; i < arr.length; i++) {
-
if (arr[i] > max) {
-
max = arr[i];
-
}
-
}
-
return max;
-
}
-
var arr1 = new Array();
-
arr[0] = 12;
-
arr[1] = 32;
-
arr[2] = 25;
-
arr[4] = 12;
-
alert(getMax(arr1));
-
</script>
将一个字符串数组输出为|分割的形式,比如“刘在石|金钟国|李光洙|HAHA|宋智孝|Gary|池石镇”。不要使用JavaScript中的Join函数。arr1.join("|")将数组用分隔符连接成一个字符串。
-
<script type="text/javascript">
-
function myjoin(arr) {
-
if (arr.length <= 0) {
-
return "";
-
}
-
var s = arr[0];
-
for (var i = 1; i < arr.length; i++) {
-
s = s + "|" + arr[i];
-
}
-
return s;
-
}
-
var arr = new Array();
-
arr[0] = "刘在石";
-
arr[1] = "金钟国";
-
arr[2] = "李光洙";
-
arr[3] = "HAHA";
-
arr[4] = "宋智孝";
-
arr[5] = "Gary";
-
arr[6] = "池石镇";
-
alert(myjoin(arr));
-
</script>
7.3 练习:
将一个字符串数组的元素的顺序进行反转。{"3","a","8","haha"} {"haha","8","a","3"}。不要使用JavaScript中的反转函数。提示:
第i个和第length-i-1个进行交换。定义成函数。myreverse
为什么length要除以2:因为
arr[i] = arr[arr.length - i - 1];
arr[arr.length - i - 1] = temp;
已经交换了。一次交换的是2个数。
-
<script type="text/javascript">
-
var f = function (arr) {
-
for (var i = 0; i < arr.length / 2; i++) {
-
var temp = arr[i];
-
arr[i] = arr[arr.length - i - 1];
-
arr[arr.length - i - 1] = temp;
-
}
-
return arr;
-
}
-
var arr = new Array();
-
arr[0] = 3;
-
arr[1] = "a";
-
arr[2] = 8;
-
arr[3] = "haha";
-
arr[4] = 2;
-
arr[5] = 1;
-
alert(arr);
-
alert(f(arr));
-
</script>
还有一种方法:
-
<script type="text/javascript">
-
var f = function (arr) {
-
var w;
-
var s = "";
-
for (var i = 0; i < arr.length; i++) {
-
w = arr.length - i - 1;
-
s = s + "," + arr[w];
-
}
-
return s.substring(1, s.length);//因为第1个s后面跟1个","所以需要截取,
-
}
-
var arr = new Array();
-
arr[0] = 3;
-
arr[1] = "a";
-
arr[2] = 8;
-
arr[3] = "haha";
-
arr[4] = 2;
-
arr[5] = 1;
-
arr[6] = 11;
-
alert(arr);
-
alert(f(arr));
-
</script>
8.JS中的Dictionary
JS中的Array是一个宝贝,不仅是一个数组,还是一个Dictionary,还是一个Stack。
-
<script type="text/javascript">
-
var pinyins = new Array();
-
pinyins["人"] = "ren";
-
pinyins["口"] = "kou";
-
pinyins["手"] = "shou";
-
alert(pinyins["人"]); //弹出ren
-
alert(pinyins.口); //弹出kou
-
for (var k in pinyins) {
-
alert(k); //分别弹出人、口、手 (注意:弹出的是key而不是value)
-
}
-
var arr = new Array();
-
arr[0] = "tom";
-
arr[1] = "Jim";
-
arr[2] = "Jerry";
-
for (var i in arr) {
-
alert(i);
-
} //弹出0,1,2,理由同上
-
</script>
for (var k in pinyins) {
alert(k); //分别弹出人、口、手 (注意:弹出的是key而不是value)
}这是js中的foreach方式运用
课下练习:网页版的火星文翻译。
9.数组、for及其他
对于数组风格的Array来说,可以使用join方法拼接为字符串
-
var arr = ["tom", "jim", "lily"];
-
alert(arr);
-
alert(arr.join("!"));//JS中join是array的方法,不像.Net中是string的方法
tom!jim!lily
for循环可以像C#中的foreach一样用
for循环还可以获得一个对象所有的成员,类似于.Net中的反射
for (var e in document) {
alert(e);
}
有了它没有文档也可以进行开发。