簡單理解js的prototype屬性

2021-09-16 12:54:54 字數 1971 閱讀 7993

prototype屬性是您有能力向物件新增屬性和方法;

先介紹乙個下面要用到的函式,json.stringify(value)。

這個函式的作用是:把傳入的引數value(物件或者陣列)變成字串,它有三個引數,第乙個引數是必須的,其餘的兩個引數可填可不填。

var ob = ;//超級簡單的空物件

alert(json.stringify(ob.prototype));

它alert的東西是undefined,也就是說object這個屬性prototype不是個東西

我可以很明白的告訴你,prototype絕對不是給物件用的,物件根本沒辦法引用prototype這個屬性,它真正的屬主,其實是函式

記住,能夠引用prototype的東西絕對是函式

prototype是函式的乙個屬性,是函式的原型物件。prototype只能夠被   函式     呼叫。

//首先定義乙個有名函式func

function func()

alert(func.prototype);

返回的就是物件

prototype是函式的乙個屬性,也是函式的原型物件,而這裡func函式引用prototype的時候返回的是乙個物件object的,那麼,結合這兩個概念,你能得出什麼結論呢?我想通過這不難得出結論:

function func()

alert(json.stringify(func.prototype));

alert的結果是乙個空物件

function func()

func.prototype.name ='prototype是函式的的屬性,本質是函式的原型物件';

alert(json.stringify(func.prototype))

因此,這裡得出結論:prototype是函式的的屬性,本質是函式的原型物件。

別以為js中只有物件才有屬性,通過這裡,我們也可以知道,其實js的函式也是有屬性的,而且js的函式好像就只有這個屬性prototype,而且js的這個函式屬性同時還是函式的原型物件

為什麼說prototype是函式的乙個屬性呢?因為,只有函式才能呼叫prototype,而且是以這樣的方式func.prototype呼叫的,這樣的方式呼叫東西是不是和物件呼叫屬性一模一樣呢?是的,就是因為函式呼叫prototype的時候是和物件呼叫屬性的時候一樣的,我們才把prototype說成是函式的乙個屬性,而函式的這個屬性其實是乙個物件(這個是不是物件,上面已經證明了,這裡就不再說明),所以說,這個prototype就是函式的屬性,本質是函式的原型物件。

這裡為什麼強調說prototype的本質是函式的原型物件呢?

下面看**證明,我的**很簡單的:

//定義乙個函式

function func()

//給函式的屬性prototype賦予乙個方法get

func.prototype.get=function(value)

你說,怎麼呼叫上面那個get方法?

我給你一點提示,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 像下面這個這樣就可以了 特別是比較大的指令碼,...