對象——function特別說明 在js中一切都是對象
類(原型對象)其實也是對象,它實際上是Function類的一個執行個體,通過類我們可以建立自己的對象執行個體,可以通過下面的代碼來說明
function Person(){ } var a=new Person(); window.alert(Person.constructor);
對象執行個體——如何建立對象執行個體 var 對象名=new 類名/原型對象名();
對象執行個體——如何訪問(使用)對象執行個體的成員變數 對象執行個體名.屬性名稱;
對象執行個體名["屬性名稱"];
對象執行個體名["變數名"]的方式可以實現動態訪問變數,如:
function Person(){ } var p1=new Person(); p1.name="順平"; window.alert(pa['name']+" "+p1.name);
補充說明:帶var和不帶var的區別 看代碼:
<html> <head> <script language="javascript"> //全域變數 var abc=89; function test(){ //在函數裡,如果你不帶 var,則表示使用全域的 abc 變數 //如果你帶上var,則表示重新定義一個新的 abc 變數 //可以這麼理解,//在函數內部,加 var 表示定義一個局部變數,不加 var 表示使用外部的全域變數 abc=900; } test(); window.alert(abc); //輸出900 var abc2=89; function test2(){ var abc2=900; } test2(); window.alert(abc2); //輸出89 </script> </head> <body></body> </html>
動態訪問變數的意義:可以當作串來拼接訪問 具體看如下代碼
<html> <head> <script language="javascript"> function Person(){ } var p1=new Person(); p1.name="順平"; //拼接字串,動態訪問 var val="na"+"me"; window.alert(p1[val] + p1.name); </script> </head> <body></body> </html>
加深一下理解 為了讓大家加深印象,我們定義一個人類(Person)(包括名字,年齡)
看下面的一段代碼
<html> <head> <script language="javascript"> function Person(){ } var a=new Person(); a.age=10; a.name="小明"; var b=a; b.name="小白"; window.alert(b.age+"名字 "+b.name+" 名字"+a.name); </script> </head> <body></body> </html>
從上面代碼中可以知道,js對象的傳遞也是引用傳遞
var a=new Person(); // new Person()是一個真正的資料,a是指向它的一個引用
深入理解:
什麼時候才會把堆裡的內容回收了呢
對象回收機制(GC),記憶體回收(GC)是怎樣確定堆裡的內容是垃圾的呢,記憶體被js引擎管理,js引擎是瀏覽器的一部分,js引擎維護了一張表
記憶體回收機制是一種被動的回收方式,GC什麼時候來調用,我們是不知道的,反正不是時時刻刻在調用的
在js中還有一種主動的刪除方式,主動釋放記憶體:delete delete 只能刪除掉某個對象的屬性,不能直接刪除某個對象 如下:
delete a.age; //直接把age屬性刪掉了,即使b沒有置空,b.age也訪問不到了。delete a; //這句話是不對的
delete直接刪除掉某個對象的屬性
delete 對象名.屬性 //這樣就會立即釋放對象的這個屬性空間
再來看一個代碼:
var a=new person();a.age=10;a.name="小明";var b=a;document.write(b.name); // 輸出小明b.age=200;document.write(a.age); // 輸出200