1.對象分類
物件類型有三種:本機物件、內建對象和宿主對象。
(1)本機物件
主要包括:Object,Function,Array,String,Boolean,Number,Date,RegExp,Error等。舉例:
Array類
定義方法:
<1> var aVaulues=new Array(20);
<2> var aColors=new Array();
aColors[0]="red";
aColors[1]="blue";
aColors[2]="green";
<3> var aColors=new Array("red","blue","green");
<4> var aColors=["red","blue","green"];
屬性:
length,方法:toString(),valueOf(),join(),slice(),push(),pop(),shift(),unshift(),splice().
<1> toString()
var aColors=["red","blue","green"];
alert(aColors.toString()); //outputs "red,blue,green"
alert(aColors.valueOf()); //outputs "red,blue,green"
如需逐個字元解析字串,可以這樣:
var sColor="green";
var aColor=sColor.split(""); //***
alert(aColor.toString()); //outputs "g,r,e,e,n"
<2> join()
var aColors=["red","blue","green"];
alert(aColors.join("")); //outputs "redbluegreen"
alert(aColors.join(",")); //outputs "red,blue,green"
alert(aColors.join("-spring-")); //outputs "red-spring-blue-spring-green"
<3> slice()
var aColors=["red","blue","green"];
alert(aColors.slice(0,2)); //outputs "red,blue"
<4> push(),pop()操作字串尾部
var stack =new Array;
stack.push("red");
stack.push("blue","green"); //可以有多個參數 //***
alert(stack.toString()); //outputs "red,blue,green"
var vItem=stack.pop(); //刪除棧頂,並且傳回值//***
alert(vItem);
alert(stack.toString()); //outputs "blue,green"
<5> shift()和unshift()操作字串頭部
var queue=["red","blue","green"];
queue.push("yellow");
queue.shift();
alert(queue.toString()); //outputs "blue,green,yellow"
<6>splice()
var arr=["red","blue","green"];
arr.splice(0,2); //刪除,從第0個位置開始的2字元
arr.splice(1,0,"yellow","black"); //插入,(替換而不刪除)第2個位置字元,如:
alert(arr); //outputs "red,yellow,black,blue,green"
arr.splice(2,1,"yellow","black"); //替換並刪除第2個位置字元
(2)內建對象
內建對象為本機物件子集,ECMAScript定義了兩個內建對象,即Global和Math.
<1>Global對象
Glbal對象屬性有:undefined,NaN,Inifinity等,方法有:isNaN(),isFinite(),paseInt()等等.
encodeURI(),encodeURIComponent(),decodeURI()...
有效URI不能包含某些字元,如空格。所以要編碼,如:
var sUri="http://www.wrox.com/illegal value.htm#start";
alert(encodeURI(sUri));
alert(encodeURIComponent(sUri));
//相對BOM的escape()和unescape()方法,URI方法更可取,因為它們會對所有Unicode符號編碼,BOM方法只
對ASCII符號正確編碼。
<2>Math對象
var iMax=Math.max(2,33,22,9);
alert(iMax);
alert(Math.floor(25.5)); //outputs "25"
alert(Math.ceil(25.5)); //outputs "26"
1~10的隨機數:
var iNum=Math.floor(Math.random()*10+1);//其中"10"指總個數,"1"指從1開始。
2~10的隨機數:
var iNum=Math.floor(Math.random()*9+2);
舉例:隨機選出不同顏色 //***
function selectFrom(iFirstValue, iLastValue) {
var iChoices = iLastValue - iFirstValue + 1;
return Math.floor(Math.random() * iChoices + iFirstValue);
}
var aColors = ["red", "green", "blue", "yellow", "black", "purple", "brown"];
var sColor = aColors[selectFrom(0, aColors.length-1)];
alert(sColor);
(3)宿主對象
由宿主環境提供的對象,如BOM,DOM的所有對象。
2.定義對象
建立類的最好方式是用建構函式方式定義屬性,用原型方式定義方法(為避免每次調用建構函式都要建立其內的方法)。
混合(工廠/原型)模式:
為了避免在原廠模式下每次調用建構函式都要建立其內的方法,所以採用此模式,讓方法單獨用原型方式定義。如:
function Car(sColor, iDoors, iMpg) {
this.color = sColor;
this.doors = iDoors;
this.mpg = iMpg;
this.drivers = new Array("Mike", "Sue");
}
Car.prototype.showColor = function () {
alert(this.color);
};
var oCar1 = new Car("red", 4, 23);
var oCar2 = new Car("blue", 3, 25);
oCar1.drivers.push("Matt");
alert(oCar1.drivers); //outputs "Mike,Sue,Matt"
alert(oCar2.drivers); //outputs "Mike,Sue"
3.修改對象
這部分相當有趣!可以用prototype屬性為任何已有對象建立新方法!如:
Array.prototype.enqueue=function(vItem)//也可以用同樣的辦法重定義已有方法 //***
{
this.push(vItem);
}
也可以為所有本機物件添加新方法,須在Object對象的prototype屬性上定義它。如:
Object.prototype.showValue=function()
{
alert(this.valueOf());
}
var str="hello";
alert(str.showValue()); //outputs "hello"