韓順平 javascript教學視頻_學習筆記13_類和對象細節_創建對象的幾種方式_js對象內存分析

對象——function特別說明

  1. 在js中一切都是對象
  2. 類(原型對象)其實也是對象,它實際上是Function類的一個實例,通過類我們可以創建自己的對象實例,可以通過下面的代碼來說明
function Person(){  
}  
var a=new Person();  
window.alert(Person.constructor);

對象實例——如何創建對象實例

var 對象名=new 類名/原型對象名();

對象實例——如何訪問(使用)對象實例的成員變量

  1. 對象實例名.屬性名;
  2. 對象實例名["屬性名"];

對象實例名["變量名"]的方式可以實現動態的訪問變量,如:
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

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