1. 程式人生 > >總結-定義物件進階&Object&hasOwnProperty()&create()&call、apply、bind函式&繼承&靜態屬性&私有屬性&this指向

總結-定義物件進階&Object&hasOwnProperty()&create()&call、apply、bind函式&繼承&靜態屬性&私有屬性&this指向

定義物件進階&Object&hasOwnProperty()&create()&call、apply、bind函式&繼承&靜態屬性&私有屬性&this指向
	定義物件進階
		1.建構函式方式
			這種方式定義的物件會佔用很多記憶體,因為每個物件建立單獨的空間,儲存各自的內容
		2.原型物件方式
			缺點:當改變一個物件的引用型別的屬性後,其他物件也發生了變化
		3.混合方式定義
			混合是指建構函式方式和原型物件方式混合,將屬性放到建構函式內部,將成員方法放到原型物件中。
			節省記憶體,而且又能將函式區分開
		4.動態混合方式
			類似於單例模式的寫法
	Object 
		Object是JS內建的一個建構函式
		Object函式也有原型物件
		所有自定義物件,它的原型物件都是Object物件。所以自定義物件可以使用Object函式中的成員,也可以使用Object原型物件上的成員
	hasOwnProperty()
		hasOwnProperty方法是Object函式的原型物件上的方法。
		hasOwnProperty方法用於檢測例項物件是否有非繼承的屬性,也就是自身有該屬性。
	create()
		create()方法是Obejct建構函式內的成員方法,而且是一個靜態方法(呼叫方式是直接使用Object來呼叫)。
		create()方法用於建立物件,建立物件的時候,可以指定物件的原型物件。
		var o = Object.create({原型物件}, {o物件的內容});
		var o = Object.create({父物件}, {子物件o本身});
	call、apply、bind函式
		這三個函式都可以改變函式內部this的指向
		函式.call(希望this指向的物件,引數1, 引數2…);  呼叫之後,會直接執行函式
		函式.apply(希望this指向的物件,[引數1, 引數2…]); 呼叫之後,會直接執行函式
		函式.bind(希望this指向的物件,引數1, 引數2…);  呼叫之後,不會執行函式。
	繼承
		冒充繼承
			父類.call(子類的物件, 其他引數);  //意思是讓子類的物件,去代替父類中的this。
		原型鏈繼承
			通過prototype實現,指定B的原型物件為A的例項
		create()繼承
			var o = Object.create({原型物件}, {o物件的內容});
	靜態屬性
		靜態方法的特點就是可以直接使用建構函式來呼叫
		把屬性直接定義到建構函式上即可。呼叫的時候,也是直接使用建構函式來呼叫。
	私有屬性
		私有屬性其實就是函式內部的區域性變數。
	this指向
		this永遠指向一個物件。
		this指向的物件是誰,關鍵要看this執行的環境。也就是this所在的函式被賦值給哪個物件了,那麼this就表示這個物件。
		全域性環境下,this表示window物件。
		事件處理函式中,this表示繫結事件的DOM物件。
		面向物件中的this表示函式所屬的物件。
		定時器中的this
			setTimeout(obj.fn,  1000);  // 執行的時候,fn 所在的環境丟失。this容易發生改變
			setTimeout('obj.fn()',  1000); // 執行的時候,fn還在obj物件環境中,this不會發生變化