Js面向(基於)對象編程介紹
以類(原型對象)為模板建立對象
//張老太養貓的問題//傳統方法比較麻煩var cat1_name="小白";var cat1_age=3;var cat1_color="白色";//解決辦法:把貓的屬性集中,建立一種新的資料類(原型對象/類)。用物件導向的辦法來解決上面的問題。//這裡就是一個cat類function Cat(){}//如果你這樣用//Cat();//函數var cat1=new Cat();//類//這時cat1就是一個對象(執行個體)cat1.name="小白";cat1.age=3;cat1.color="白色";//從上面的代碼我們可以看出//1.js中的對象的屬性可以動態添加。//2.屬性沒有限制。window.alert(cat1.name+cat1.age+cat1.color+cat1.hobby);//沒有定義的對象會彈出undefined
精簡如下:
建立對象的方式有五種:
使用建構函式來定義類(原型對象)
舉例:
//在js中一切都是對象function Person(){}window.alert(Person.constructor);//類也是對象,是以function創造出來的對象var a=new Person();window.alert(a.constructor);//a對象執行個體的建構函式window.alert(typeof a);//a的類型是什麼var b=123;window.alert(b.constructor);window.alert(typeof b);var c="123";window.alert(c.constructor);window.alert(typeof c);
如何判斷一個對象執行個體是不是Person類型。
if (a instanceof Person){window.alert("a是person ok1");}if(a.constructor==Person){ window.alert("a是person ok2");}
//訪問對象屬性的兩種方式function Person(){}var p1=new Person;p1.name="順平";alert(p1.name);alert(p1["name"]);var val="na"+"me";alert(p1[val]);
運行結果:10名字小白名字小白
運行原理圖:
js記憶體回收機制:
記憶體由js引擎管理,js引擎是瀏覽器的一部分
引用次數為0 內容清零 記憶體回收
對象引用問題的說明-----圖
① Js被動釋放對象記憶體:
被動體現就算引用次數為0 ,在也不知道什麼時候會回收,可能是記憶體不夠用的時候
//js中釋放記憶體①----被動 function Person(){} var a=new Person(); a.age=10; a.name="小明"; var b=a; b.name="小白"; window.alert(b.age+"名字"+b.name+"名字"+a.name);//至此引用了兩次堆裡面的內容b=null;window.alert(a.age+"名字"+a.name);window.alert("b.age="+b.age);//此時引用一次a=null;
② js還提供一種方式,主動釋放對象記憶體: delete
js中釋放記憶體②----主動 deletefunction Person(){};var a=new Person();a.age=10;a.name="小明";var b=a;b.name="小白";window.alert(b.age+"1名字"+b.name);delete a.age;//刪除a對象的屬性(不能刪對象,只能刪屬性)//a和b 是指向同一個地方,所以b.age也會被刪掉。window.alert(b.age+"2名字"+b.name);
運行結果: 小明 200