prototype屬性是您有能力向物件新增屬性和方法;
先介紹乙個下面要用到的函式,json.stringify(value)。
這個函式的作用是:把傳入的引數value(物件或者陣列)變成字串,它有三個引數,第乙個引數是必須的,其餘的兩個引數可填可不填。
var ob = ;//超級簡單的空物件它alert的東西是undefined,也就是說object這個屬性prototype不是個東西alert(json.stringify(ob.prototype));
我可以很明白的告訴你,prototype絕對不是給物件用的,物件根本沒辦法引用prototype這個屬性,它真正的屬主,其實是函式
記住,能夠引用prototype的東西絕對是函式
prototype是函式的乙個屬性,是函式的原型物件。prototype只能夠被 函式 呼叫。
//首先定義乙個有名函式func返回的就是物件function func()
alert(func.prototype);
prototype是函式的乙個屬性,也是函式的原型物件,而這裡func函式引用prototype的時候返回的是乙個物件object的,那麼,結合這兩個概念,你能得出什麼結論呢?我想通過這不難得出結論:
function func()alert的結果是乙個空物件alert(json.stringify(func.prototype));
function func()因此,這裡得出結論:prototype是函式的的屬性,本質是函式的原型物件。func.prototype.name ='prototype是函式的的屬性,本質是函式的原型物件';
alert(json.stringify(func.prototype))
別以為js中只有物件才有屬性,通過這裡,我們也可以知道,其實js的函式也是有屬性的,而且js的函式好像就只有這個屬性prototype,而且js的這個函式屬性同時還是函式的原型物件
為什麼說prototype是函式的乙個屬性呢?因為,只有函式才能呼叫prototype,而且是以這樣的方式func.prototype呼叫的,這樣的方式呼叫東西是不是和物件呼叫屬性一模一樣呢?是的,就是因為函式呼叫prototype的時候是和物件呼叫屬性的時候一樣的,我們才把prototype說成是函式的乙個屬性,而函式的這個屬性其實是乙個物件(這個是不是物件,上面已經證明了,這裡就不再說明),所以說,這個prototype就是函式的屬性,本質是函式的原型物件。
這裡為什麼強調說prototype的本質是函式的原型物件呢?
下面看**證明,我的**很簡單的:
//定義乙個函式你說,怎麼呼叫上面那個get方法?function func()
//給函式的屬性prototype賦予乙個方法get
func.prototype.get=function(value)
我給你一點提示,get是屬於func函式的乙個屬性函式,既然是屬性函式,那麼我們怎麼呼叫呢?
很簡單,屬性函式必須由它的物件來呼叫,那麼我們怎麼獲取get的物件呢?很簡單,用關鍵字new來例項化func函式的物件就行了嗎?是吧?
沒錯,用func函式例項化出來的物件ob1,確實能夠呼叫get函式,上面已經利用ob1呼叫get函式alert出來了,這就證明func函式的例項物件是擁有get這個屬性函式的
特別指出:
array.prototype是乙個陣列
string.prototype是乙個字串
object.prototype是乙個物件
這三個特殊例子,不像建構函式的prototype一樣
下面,例項化func函式的乙個物件ob1:
var ob1 = new func();//用func例項化出來的物件來呼叫get屬性函式
alert(ob1.get('hello,prototype原型物件'));
簡單理解js的this
js的this是什麼?關於這個東西,裡面有太多的解釋了,不過,本人看了一下,感覺對this解釋的有點複雜了,因此,本人在此給this乙個簡單易於理解的定義。this其實是js的乙個物件,至於是什麼物件呢?很簡單,this這個物件就是 誰呼叫它它就指向誰。關於這一點,其實,的文章已經說明了很多了,有的...
js中defer簡單理解
defer只是載入完成頁面元素後在執行js指令碼。其實就是簡單的利用defer屬性,讓瀏覽器讀js指令碼的時候完全不等指令碼開始讀就開始讀下面的啊,html 了。然後讓js指令碼自己在那裡慢慢讀取完以後再執行。給外鏈的js指令碼新增defer true 像下面這個這樣就可以了 特別是比較大的指令碼,...
js中defer簡單理解
defer只是載入完成頁面元素後在執行js指令碼。其實就是簡單的利用defer屬性,讓瀏覽器讀js指令碼的時候完全不等指令碼開始讀就開始讀下面的啊,html 了。然後讓js指令碼自己在那裡慢慢讀取完以後再執行。給外鏈的js指令碼新增defer true 像下面這個這樣就可以了 特別是比較大的指令碼,...