對象——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引擎維護了一張表
delete a.age; //直接把age屬性刪掉了,即使b沒有置空,b.age也訪問不到了。
delete a; //這句話是不對的
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