js中原型的概念

原型prototype:

我們所創建的每一個函數,解析器都會向函數中添加一個屬性prototype
這個屬性對應着一個對象,這個對象就是我們所謂的原型對象
如果函數作爲普通函數調用prototype沒有任何作用
當函數以構造函數的形式調用時,它所創建的對象中都會有一個隱含的屬性,
指向該構造函數的原型對象,我們可以通過__proto__來訪問該屬性
原型對象就相當於一個公共的區域,所有同一個類的實例都可以訪問到這個原型對象我們可以將對象中共有的內容,統一設置到原型對象中。

當我們訪問對象的一個屬性或方法時,它會先在對象自身中尋找,如果有則直接使用,如果沒有則會去原型對象中尋找,如果找到則直接使用。
以後我們創建構造函數時,可以將這些對象共有的屬性和方法,統一添加到構造函數的原型對象中,
這樣不用分別爲每一個對象添加,也不會影響到全局作用域,就可以使每個對象都具有這些屬性和方法

譬如:構造函數Person中有一個方法fun

Person{
func:fun
}
function fun(){

}

如果下邊還有fun,那麼會造成覆蓋等一系列問題
但是也可以這樣聲明:

Person.prototype.func = function fun(){};

這樣直接把fun放在了Person的原型裏,用Person構造的對象都具有這個函數。

原型對象也是對象,所以它也有原型,當我們使用一個對象的屬性或方法時,會現在自身中尋找,自身中如果有,則直接使用,如果沒有則去原型對象中尋找,如果原型對象中與,則使用,如果沒有則去原型的原型中尋找,直到找到Object,如果Object裏也沒有,那麼返回undefined。
判斷一個方法是否爲自身的,需要使用hasOwnProperty()函數
括號內需要加引號,爲真則返回true,否則返回false

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