constructor prototype

萬(wàn)能的例子

function Rectangle(x,y){
    this.x = x;
    this.y = y;
}
Rectangle.prototype.perimeter=function(){
    return 2*(this.x+this.y);
}
var rectangle = new Rectangle();

一個(gè)對(duì)象的原型與對(duì)象的 prototype屬性不是一回事

前者用于在原型鏈中匹配不存在的屬性踪央。后者用于通過(guò) new 關(guān)鍵字創(chuàng)建對(duì)象蕴茴,它將作為新創(chuàng)建對(duì)象的原型爆价。
以最初的例子為例尿褪,rectangle的原型是Rectangle.prototype光绕。轉(zhuǎn)換成代碼就是下面這句話。

// DEPRECATED. This is for example purposes only. DO NOT DO THIS in real code.
//如果確實(shí)需要募狂,請(qǐng)用Object.getPrototypeOf(rectangle)代替rectangle.__proto__ 
rectangle.__proto__ = Rectangle.prototype;

new 操作符到底做了什么办素?

When the code new Foo(...) is executed, the following things happen:

  1. A new object is created, inheriting from Foo.prototype.(inheriting我的理解是新對(duì)象的原型角雷,即proto,也即Object.getPrototypeOf(新對(duì)象)性穿,指向Foo.prototype,j)
  2. The constructor function Foo is called with the specified arguments, and with this bound to the newly created object. new Foo is equivalent to new Foo(), i.e. if no argument list is specified, Foo is called without arguments.
  3. The object returned by the constructor function becomes the result of the whole new expression. If the constructor function doesn't explicitly return an object, the object created in step 1 is used instead. (Normally constructors don't return a value, but they can choose to do so if they want to override the normal object creation process.)

比如當(dāng)你執(zhí)行

var o = new Foo();
var o = new Object();//創(chuàng)建一個(gè)新對(duì)象
o.__proto__ = Foo.prototype;//新對(duì)象的原型執(zhí)行構(gòu)造函數(shù)的prototype屬性
var ret = Foo.call(o);//執(zhí)行構(gòu)造函數(shù)勺三,并將this綁定為新創(chuàng)建的對(duì)象。
if(typeof Foo()==="object"){//如果返回值是一個(gè)對(duì)象
    o=Foo();//返回值將覆蓋o
}

為什么實(shí)例的屬性不寫在原型鏈上需曾,而寫在this.xxx里面吗坚,而方法要寫在構(gòu)造函數(shù)的prototype屬性上。

因?yàn)槊看蝿?chuàng)建實(shí)例的時(shí)候會(huì)new 構(gòu)造函數(shù)呆万,是對(duì)構(gòu)造函數(shù)中實(shí)例變量商源,實(shí)例方法的一次完全復(fù)制。而方法都是在做完全一樣的功能谋减,沒(méi)有必要復(fù)制那么多次牡彻,于是就統(tǒng)一寫在了構(gòu)造函數(shù)的prototype上。

屬性寫在this.xxx里面出爹,是為了屬性私有庄吼。每個(gè)實(shí)例都有它特定的屬性,new 構(gòu)造函數(shù)的時(shí)候通過(guò)參數(shù)傳入屬性严就。

  1. 讓屬性支持傳參數(shù)進(jìn)行控制总寻,不寫死。
  2. 查找原型鏈更耗費(fèi)時(shí)間盈蛮。(其實(shí)完全可以忽略)

內(nèi)部原型引用

對(duì)象中保存原型的變量废菱,也被稱之為內(nèi)部原型引用(the internal prototype link),歷史上也曾稱之為 __proto__ 抖誉,對(duì)這個(gè)稱謂始終存在一些爭(zhēng)議殊轴。 更精確的,它可以被稱為 Object.getPrototypeOf(...) 的返回值袒炉。

constructor

注:constructor屬性并非一定指向構(gòu)造函數(shù)旁理,他也是可以修改、變更的我磁。

參考文獻(xiàn)

  1. javascript prototype
  2. 繼承與原型鏈
  3. JavaScript中_ proto _與prototype的關(guān)系
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末孽文,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子夺艰,更是在濱河造成了極大的恐慌芋哭,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,639評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件郁副,死亡現(xiàn)場(chǎng)離奇詭異减牺,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,277評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門拔疚,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)肥隆,“玉大人,你說(shuō)我怎么就攤上這事稚失《把蓿” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,221評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵句各,是天一觀的道長(zhǎng)吸占。 經(jīng)常有香客問(wèn)我,道長(zhǎng)凿宾,這世上最難降的妖魔是什么旬昭? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,474評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮菌湃,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘遍略。我一直安慰自己惧所,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,570評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布绪杏。 她就那樣靜靜地躺著下愈,像睡著了一般。 火紅的嫁衣襯著肌膚如雪蕾久。 梳的紋絲不亂的頭發(fā)上势似,一...
    開(kāi)封第一講書(shū)人閱讀 49,816評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音僧著,去河邊找鬼履因。 笑死,一個(gè)胖子當(dāng)著我的面吹牛盹愚,可吹牛的內(nèi)容都是我干的栅迄。 我是一名探鬼主播,決...
    沈念sama閱讀 38,957評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼皆怕,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼毅舆!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起愈腾,我...
    開(kāi)封第一講書(shū)人閱讀 37,718評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤憋活,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后虱黄,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體悦即,經(jīng)...
    沈念sama閱讀 44,176評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,511評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了盐欺。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片赁豆。...
    茶點(diǎn)故事閱讀 38,646評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖冗美,靈堂內(nèi)的尸體忽然破棺而出魔种,到底是詐尸還是另有隱情,我是刑警寧澤粉洼,帶...
    沈念sama閱讀 34,322評(píng)論 4 330
  • 正文 年R本政府宣布节预,位于F島的核電站,受9級(jí)特大地震影響属韧,放射性物質(zhì)發(fā)生泄漏安拟。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,934評(píng)論 3 313
  • 文/蒙蒙 一宵喂、第九天 我趴在偏房一處隱蔽的房頂上張望糠赦。 院中可真熱鬧,春花似錦锅棕、人聲如沸拙泽。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,755評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)顾瞻。三九已至,卻和暖如春德绿,著一層夾襖步出監(jiān)牢的瞬間荷荤,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,987評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工移稳, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留蕴纳,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,358評(píng)論 2 360
  • 正文 我出身青樓秒裕,卻偏偏與公主長(zhǎng)得像袱蚓,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子几蜻,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,514評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容