值得收藏的js原型詳解

2022-02-08 02:37:08 字數 2831 閱讀 5768

起初,地是空虛混沌,淵面黑暗;這時候一切還是null

神說,要有原型,於是就有了prototype

原型從憑空產生,於是需要乙個指向於null的特徵,人們把這種特徵叫做隱式原型,即__proto__,其實也就一種指向,表達的是自己從何而來,也就是:object.prototype.__proto__ === null

「妖孽還不現出原型」

對,原型一般不顯露,顯露的一般都是乙個物件,所以才會有「物件的原型」一說,就好像每個妖精都有自己的原型一樣。

object與原型的關係

object通過prototype找到原型,原型通過constructor找到object,也就是:object.prototype.constructor === object

函式共有的特點

constructor的意思是構造器,而此時的object還不能構造任何東西,因此object需要變成能構造物件的函式,這樣的函式我們稱之為建構函式;而這樣的函式不會憑空產生,它首先得要是個函式,才能進行構造,也就是說會有條隱式原型指向function.prototype,表示它是個函式;

同樣說明:只要是函式,就有一條__proto__指向function.prototype,包括function自己;也就是:function.__proto__===function.prototype

一切的起源object.prototype

除了object.prototype是從null衍生而來,那其他原型呢?要知道,在object世界中沒有人是憑空產生的,object.prototype除開;

可以看到所有建構函式的原型都是直接或間接來著object.prototype,而所有系統建構函式的原型都直接來著於object.prototype;

眾所周知,js在找乙個物件裡面的屬性的時候,如果在該物件找不到,就會去該物件的__proto__裡面找,如果__proto__裡面找不到,就會去物件的__proto__.__proto__裡面找,直到找到null為止;

所以,換句話說,這裡的建構函式都直接或間接的繼承了object.prototype的屬性和方法,在類中,這些都相當於object.prototype的子孫類,所以,object.prototype才是一切的起源;

new做了啥?

例項化通常是指用類建立物件的過程,而在js中例項化有三種常見方法:

工廠模式

function createobj() 

let obj = createobj();

建構函式

function createobj(name, age) 

let obj = new createobj("小公尺", 22);

原型模式

function createobj() {};

createobj.prototype= ;

let obj = new createobj();

這些例項化的方法無疑都用到了new,那new究竟在做了什麼呢?

其實new只做了三件很簡單的事

建立乙個空物件var obj = object.create(null);

讓這個物件繼承類的原型obj.__proto__ = createobj.prototype;

createobj建構函式的this指標替換成obj,然後再呼叫createobj函式createobj.call(obj);

現在第一步和第二是可以合併在一起的;var obj = object.create(createobj);

只要是函式,就有一條__proto__指向function.prototype,包括function建構函式;

除了object.prototype從null而來,就沒有其他物件憑空產生了,絕對會有一條__proto__表明該物件的起源;

值得收藏的js原型詳解

不格網 vbuge.com 起初,地是空虛混沌,淵面黑暗 這時候一切還是null 神說,要有原型,於是就有了prototype 原型從憑空產生,於是需要乙個指向於null的特徵,人們把這種特徵叫做隱式原型,即 proto 其實也就一種指向,表達的是自己從何而來,也就是 object.prototyp...

JS 原型(prototype)詳解

首先來看一段 function c function f 在js中 function 關鍵字有兩個含義,既可以把它當作乙個普通函式關鍵字,也可以把它當作類的建構函式 即定義類 關鍵字。上面定義的兩個函式,不管你是想定義乙個類的建構函式還是就定義乙個普通函式。它們都包含乙個prototype和cons...

勵志的語句,值得收藏

1.我們太年輕 以致都不知道以後的時光竟然還有那麼長 長得足夠讓我忘記你 足夠讓我重新喜歡乙個人 就像當初喜歡你一樣 2。乙個人如果想做他喜歡的事情 就一定要做很多他不喜歡的事情 很多很多 3。我一點也不孤獨 因為我的世界只有我乙個人已經足夠熱鬧了 4。失敗的人有兩種 一種是什麼人的話都聼 一種是什...