javascript的prototype

函數也是一個對象,所有函數都有一個prototype屬性,在函數定義的時候被創建和初始化。prototype初始爲一個對象,擁有一個constructor屬性,該屬性指回擁有該prototype屬性的函數對象。


每個對象都包含一份其構造函數對象的prototype屬性對象的屬性的淺拷貝

例:var o = new O(); O.prototype.p = 5; o.p是O.prototype.p的淺拷貝

    即:對象o包含一份其構造函數對象O的prototype屬性對象的屬性p的淺拷貝

簡化:實際就是將prototype替換成了o,故由prototype調用函數時,實際就是o調用,所以可用this

// 模擬prototype
		// 當函數被定義的時候
		function __sys__initFunctionObject(funcObj){
			// 1.函數對象都有個初始化爲對象的prototype屬性
			funcObj._prototype = new Object();
			funcObj._prototype.constructor = funcObj;
		}
		// 當prototype對象的屬性變更的時候
		function __sys__copyPrototype(funcObj, obj){
			for(var name in funcObj._prototype){// 3.淺拷貝
				obj[name] = funcObj._prototype[name];
			}
		}
		__sys__initFunctionObject(Sxx); // 不可見
		function Sxx(){
			__sys__copyPrototype(Sxx, this); // 不可見	
		}
		Sxx._prototype.id = 1; // 2.爲prototype屬性對象添加屬性
		var s = new Sxx();
		console.log(s);

wKiom1f1yCbRdF31AABFfxhkqCk480.png

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