標籤:bsp 範圍 資料 學習 amp 變數 作用 http ref
建立執行個體funtion Fn (){ var num = 10; this.x = 100; this.getX = function(){ console.log(this.num); }
}var f1 = new Fn;f1.getX();最後執行的結果是:undefined說明: 類有普通的裡面,當函數執行的時候,var num只是當的形成的私人範圍中的私人變數而已,它和我們的f1這個執行個體沒有任何的關係,只有this.xxx=xx才相當於給f1增加私人的屬性和方法,才和我們的f1有關係;funtion Fn (){ var num = 10; this.x = 100; this.getX = function(){ console.log(this.num); }
return false;
return {"name","123"};
}var f1 = new Fn;console.log(f1);說明:在建構函式歐式中,瀏覽器會預設的把我們的執行個體返回(返回的是一個資料類型的值);如果我們手動寫了return返回: 返回的是一個基礎資料型別 (Elementary Data Type)就那個的值,房錢執行個體是不變的,例如:return 100;我們的f1還是當前Fn的執行個體 返回的是一個引用資料類型的值,當前的執行個體會被自己的傳回值給替換掉,例如返回:return {"name","123"};我們的f1就不再是Fn的執行個體了,而是對象{“name”,"123"};funtion Fn (){ var x= 10; this.getX = function(){ console.log(this.x); }}var f1 = new Fn;說明:檢測某個執行個體是否屬於這個類---》instanceofconsole.log(f1.instanceof Fn);//-->true這方法可以檢測資料類型:f1 instanceof Array -> false;f1 instanceof Object -> true
這個檢測資料類型的方法可以和typeof比較funtion Fn (){ var x= 10; this.getX = function(){ console.log(this.x); }}var f1 = new Fn;var f2 = new Fn;說明 : f1和f2都是Fn這個類的一個執行個體,都擁有x和getX兩個屬性,但是這個屬性是各自的私人屬性,所以console.log(f1.getX ==== f2.getX);//--> false
in 檢測某一個屬性是否屬於這個對象(attr in object),不管是私人的屬性還是公用的屬性,只要存在,用in檢測都是true
//hasOwnProperty:用來檢測某一個屬性是否是這個對象的“私人屬性”,這個方法只能檢測私人屬性console.log(f1.hasOwnProperty("getX"));-->true "getX"是f1的私人屬性
//檢測某一個屬性是否是這個對象的“公有屬性”
function hasPubProperty(obj,attr){ return (attr in obj) && !obj.hasOwnProperty(attr);
//屬性是對象的屬性,但又不是私人的屬性,必定是公有屬性;}
null
JS學習筆記-建構函式篇