自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

JS為什么會(huì)有原型的概念?

開發(fā) 前端
因?yàn)樵缙诘臑g覽器只能用來瀏覽,不具備與訪問者互動(dòng)的能力。比如,如果網(wǎng)頁上有一欄"用戶名"要求填寫,瀏覽器就無法判斷訪問者是否真的填寫了,只有讓服務(wù)器端判斷。

[[402108]]

因?yàn)樵缙诘臑g覽器只能用來瀏覽,不具備與訪問者互動(dòng)的能力。比如,如果網(wǎng)頁上有一欄"用戶名"要求填寫,瀏覽器就無法判斷訪問者是否真的填寫了,只有讓服務(wù)器端判斷。

如果沒有填寫,服務(wù)器端就返回錯(cuò)誤,要求用戶重新填寫,這太浪費(fèi)時(shí)間和服務(wù)器資源了。

這個(gè)時(shí)候需要一門網(wǎng)頁腳本語言,這種腳本語言能夠完成一些簡(jiǎn)單的操作,比如判斷用戶有沒有填寫表單。剛好這個(gè)時(shí)候是向?qū)ο缶幊?object-oriented programming)最興盛的時(shí)期,C++是當(dāng)時(shí)最流行的語言,而Java語言也馬上推出。

所以Javascript作者也受到了啟發(fā),Javascript里面所有的數(shù)據(jù)類型都是對(duì)象(object),這一點(diǎn)與Java非常相似。但是直接使用java的"繼承"機(jī)制來實(shí)現(xiàn),又覺得過于笨重,但是,Javascript里面都是對(duì)象,必須有一種機(jī)制,將所有對(duì)象聯(lián)系起來。所以,javascript作者最后還是設(shè)計(jì)了"繼承"。

但是,他不打算引入"類"(class)的概念,因?yàn)橐坏┯辛?quot;類",Javascript就是一種完整的面向?qū)ο缶幊陶Z言了,這好像有點(diǎn)太正式了,而且增加了初學(xué)者的入門難度。

他考慮到,C++和Java語言都使用new命令,生成實(shí)例。

C++的寫法是:

  1. ClassName *object = new ClassName(param); 

Java的寫法是:

  1. Foo foo = new Foo(); 

這時(shí),他想到C++和Java使用new命令時(shí),都會(huì)調(diào)用"類"的構(gòu)造函數(shù)(constructor)。他就做了一個(gè)簡(jiǎn)化的設(shè)計(jì),在Javascript語言中,new命令后面跟的不是類,而是構(gòu)造函數(shù)。

但是很快發(fā)現(xiàn)用構(gòu)造函數(shù)生成實(shí)例對(duì)象,有一個(gè)缺點(diǎn),那就是無法共享屬性和方法。

每一個(gè)實(shí)例對(duì)象,都有自己的屬性和方法的副本。這不僅無法做到數(shù)據(jù)共享,也是極大的資源浪費(fèi)。

最終加入了prototype屬性的引入

考慮到這一點(diǎn),作者決定為構(gòu)造函數(shù)設(shè)置一個(gè)prototype對(duì)象屬性。

所有實(shí)例對(duì)象需要共享的屬性和方法,都放在這個(gè)對(duì)象里面;那些不需要共享的屬性和方法,就放在構(gòu)造函數(shù)里面。

實(shí)例對(duì)象一旦創(chuàng)建,將自動(dòng)引用prototype對(duì)象的屬性和方法。

由于所有的實(shí)例對(duì)象共享同一個(gè)prototype對(duì)象,那么從外界看起來,prototype對(duì)象就好像是實(shí)例對(duì)象的原型,而實(shí)例對(duì)象則好像"繼承"了prototype對(duì)象一樣。

面試總結(jié)回答

  • JavaScript采用原型編程,所有對(duì)象都能共享原型上的方法,節(jié)省內(nèi)存;
  • 同時(shí)基于原型這一實(shí)現(xiàn)思想,JavaScript通過找對(duì)原型鏈,方便地實(shí)現(xiàn)了繼承。

這就是原型編程帶來的2個(gè)最大好處!!!

參考資料

內(nèi)容有最簡(jiǎn)化,如果需要看原始總結(jié)請(qǐng)查看阮一峰博客↓

http://ruanyifeng.com/blog/2011/06/designing_ideas_of_inheritance_mechanism_in_javascript.html

https://blog.csdn.net/daigualu/article/details/54772799

本文轉(zhuǎn)載自微信公眾號(hào)「前端人」,可以通過以下二維碼關(guān)注。轉(zhuǎn)載本文請(qǐng)聯(lián)系前端人公眾號(hào)。

 

責(zé)任編輯:武曉燕 來源: 前端人
相關(guān)推薦

2020-09-10 07:04:30

JSJavaScript 原型鏈

2020-08-02 22:54:04

Python編程語言開發(fā)

2017-03-09 11:15:18

LinuxRoot賬戶

2013-01-15 09:41:45

編程語言

2019-12-02 14:22:01

浪費(fèi)云計(jì)算支出

2017-12-21 19:38:50

潤(rùn)乾中間表

2021-12-20 14:42:39

程序員職業(yè)技術(shù)

2022-07-26 23:43:29

編程語言開發(fā)Java

2013-01-24 09:44:44

數(shù)據(jù)庫

2019-02-27 16:00:48

JS原型原型鏈對(duì)象

2015-11-04 09:57:18

JavaScript原型

2022-08-02 18:37:24

BI系統(tǒng)快照表

2020-10-15 13:19:24

為什么會(huì)存在亂碼

2022-12-09 14:34:40

程序員工資離職

2022-01-10 10:05:33

鍵盤屏幕內(nèi)存

2020-03-31 16:30:09

JS語言ES 6

2020-04-02 09:01:54

JSES 6開發(fā)

2012-05-02 15:56:20

PHP

2015-05-18 15:08:08

多種程序設(shè)計(jì)語言程序設(shè)計(jì)語言

2020-05-28 07:50:18

重排序happens-befCPU
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)