實例化的對象沒有prototype屬性

function Human(){
		this.height=180;	
		this.say=function(){
			alert("我在說話");
		}
	}
	var he = new Human();
	alert(Human.prototype);//Object Object
	alert(he.prototype);   //undefined

prototype是構造器/函數才具有的屬性
JavaScript內置的構造器有以下幾個:
Object,Number,Boolean,String,Array,RegExp,Date,Function,Error,Math,JSON等,
其中Math和JSON是以對象形式存在的,無需new便可創建。當我們用 var mm=new Math(1234565);的時候,會報錯。
Object,Number,Boolean,String,Array,RegExp,Date,Function,Error的原型是Function.prototype。而Math和JSON對象的原型是Object.prototype。

也就是說,Javascript中,只有上述的對象有prototype屬性,其它的通過這些構造器創建的對象,都沒有這個屬性。
1、 he 是 Human的一個實例化對象 ( typeof he = “object” ),但是不是一個函數,所以沒有prototype;Human是Function的一個實例,而Function是一個函數,他的實例Human也是一個函數 ( typeof Human = “function” ),所以他們都有prototype。此外Object Array RegExp等也是函數。Math就僅僅是一個new Object() ,不是函數。
2、構造函數的prototype,默認情況下就是一個new Object()還額外添加了一個constructor屬性。所以說默認是沒有prototype只有__proto__的。

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