JavaScript面向對象特性

1.null和undefined

null是JavaScript的一個關鍵字,它表示空值。null可以看做是Object類型的一個特殊值,如果一個對象的值是null,其含義就是該對象不是一個有效的對象。

undefined不是JavaScript的關鍵字,它是一個全局變量,也就是Global對象的一個屬性值。在JavaScript中,有以下3種可能的情況會返回undefined:

(1) 使用了一個未定義的變量

(2)使用了已經定義但是沒有賦值的變量

(3)使用了一個對象的屬性,但是該屬性不存在或者未賦值

雖然undefined和null不同,但是運行下面的代碼會返回true

alert(undefined==null);

下面的代碼運行結果也會返回true

var v="";

alert(v.a==null);

alert(v.a==undefined);

這是因爲undefined和null都代表了值的缺失,所以在這裏他們是等值的。當然它們不是完全相等,因此下面的代碼會返回false

alert(undefined===null)


2.JS中的函數

JavaScript的Function對象在調用過程中具有一個arguments屬性,它是由腳本解釋器創建的(這也是創建arguments的惟一途徑)。arguments屬性可以看做是一個Array對象,它具有length屬性,可以通過序號訪問每一個參數,而且通過arguments的callee屬性可以獲取對只在執行的Function對象的引用。

callee屬性的應用

function factorial(n){

    if(n<0){

   return -1;

}else{

  return n*arguments.callee(n-1);

}

}


alert(factorial(5));

例中的factorial函數實現了階乘的計算,它利用callee屬性完成了匿名的遞歸調用


Function對象的另一個屬性是caller,它指向正在調用當前函數的父函數對象。利用callee和caller屬性,可以很容易地實現對調用堆棧的遍歷。


3.apply和call方法

apply方法和call方法有相似之處,兩者都是將函數綁定到其他對象上執行的,區別在於調用參數的形式不同。調用apply和call方法的語法如下:

apply(thisObj[,argArray])

call(thisObj[,arg1[,arg2[,[,..argN]]]])

通過apply方法時,參數是通過Array對象傳入的;而通過call方法時,參數是一次給出的


function ClassA() {

     this.prop="ClassA";

    this.methodA=function(msg){

    alert(this.prop+":"+msg);

}

}


function ClassB()  {

   this.prop ="ClassB";

   this.methodB=function (msg) {

  alert(this.prop+":"+msg);

}

}


var obj1=new ClassA();

var obj2=new ClassB();

obj1.methodA("msg1");   //輸出"ClassA:msg1";

obj2.methosB("msg2");   //輸出"ClassB:msg2";

obj1.methodA.apply(obj2,["msg1"]);   //輸出“ClassB:msg1”;

obj2.methodB.apply(obj1,["msg2"]);    //輸出"ClassA:msg2";

obj1.methodA.call(obj2,"msg1");      //輸出“ClassB:msg1”;

obj2.methodB.call(obj1,"msg2");    //輸出"ClassA:msg2"


4.this 和with  關鍵字

在JS中,this關鍵字常用於兩種地方:

(1)  在構造器函數中,指代新創建的對象實例;

(2)  在對象的方法被調用時,指代調用該方法的對象實例

如果一個函數被當做普通函數調用,那麼在函數中的this關鍵字將指向window對象。當然如果this關鍵字不在任何函數中,那麼它也指向window對象。

JS中的with關鍵字通常用來縮短特定情形下必須編寫的代碼量

如:

x =Math.cos(3*Math.PI)  +Math.sin(Math.LN10);

y=Math.tan(14*Math.E);

當使用with語句時,代碼變得更短且易讀:

with(Math)

   x=cos(3*PI)+sin(LN10);

  y=tan(14*E);


5.FOR(.....in....)


使用其可以遍歷對象的所有屬性和方法

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章