这个时候需要一门网页脚本语言,这种脚本语言能够完成一些简单的操作,比如判断用户有没有填写表单。刚好这个时候是向对象编程(object-oriented programming)最兴盛的时期,C++是当时最流行的语言,而<em>Java</em>语言也马
2021-05-29 09:30:16
作者:鬼哥 來源:前端人
因為早期的瀏覽器只能用來瀏覽,不具備與訪問者互動的能力。比如,如果網頁上有一欄"使用者名"要求填寫,瀏覽器就無法判斷訪問者是否真的填寫了,只有讓伺服器端判斷。
如果沒有填寫,伺服器端就返回錯誤,要求使用者重新填寫,這太浪費時間和伺服器資源了。
這個時候需要一門網頁尾本語言,這種指令碼語言能夠完成一些簡單的操作,比如判斷使用者有沒有填寫表單。剛好這個時候是向物件程式設計(object-oriented programming)最興盛的時期,C++是當時最流行的語言,而Java語言也馬上推出。
所以Javascript作者也受到了啟發,Javascript裡面所有的資料類型都是物件(object),這一點與Java非常相似。但是直接使用java的"繼承"機制來實現,又覺得過於笨重,但是,Javascript裡面都是物件,必須有一種機制,將所有物件聯絡起來。所以,javascript作者最後還是設計了"繼承"。
但是,他不打算引入"類"(class)的概念,因為一旦有了"類",Javascript就是一種完整的面向物件程式語言了,這好像有點太正式了,而且增加了初學者的入門難度。
他考慮到,C++和Java語言都使用new命令,生成例項。
C++的寫法是:
ClassName *object = new ClassName(param);
Java的寫法是:
Foo foo = new Foo();
這時,他想到C++和Java使用new命令時,都會呼叫"類"的建構函式(constructor)。他就做了一個簡化的設計,在Javascript語言中,new命令後面跟的不是類,而是建構函式。
但是很快發現用建構函式生成例項物件,有一個缺點,那就是無法共享屬性和方法。
每一個例項物件,都有自己的屬性和方法的副本。這不僅無法做到資料共享,也是極大的資源浪費。
最終加入了prototype屬性的引入
考慮到這一點,作者決定為建構函式設定一個prototype物件屬性。
所有例項物件需要共享的屬性和方法,都放在這個物件裡面;那些不需要共享的屬性和方法,就放在建構函式裡面。
例項物件一旦創建,將自動引用prototype物件的屬性和方法。
由於所有的例項物件共享同一個prototype物件,那麼從外界看起來,prototype物件就好像是例項物件的原型,而例項物件則好像"繼承"了prototype物件一樣。
面試總結回答
JavaScript採用原型程式設計,所有物件都能共享原型上的方法,節省記憶體;同時基於原型這一實現思想,JavaScript通過找對原型鏈,方便地實現了繼承。
這就是原型程式設計帶來的2個最大好處!!!
參考資料
內容有最簡化,如果需要看原始總結請檢視阮一峰部落格↓
http://ruanyifeng.com/blog/2011/06/designing_ideas_of_inheritance_mechanism_in_javascript.html
https://blog.csdn.net/daigualu/article/details/54772799
相關文章
这个时候需要一门网页脚本语言,这种脚本语言能够完成一些简单的操作,比如判断用户有没有填写表单。刚好这个时候是向对象编程(object-oriented programming)最兴盛的时期,C++是当时最流行的语言,而<em>Java</em>语言也马
2021-05-29 09:30:16
而相比起目前市场上搭载<em>高通</em>820A芯片的车型相比,其CPU和GPU的性能均比上代提升8.5倍和20倍。 正因为计算、移位、存储能力、3D图像和特效处理方面的提升,让威马W6能拥有更强的感知力、智能化,和自我进化能力
2021-05-29 09:00:48
从此刻起,Google <em>Chrome</em> 浏览器就成为了速度的代名词,而它的浏览器内核 Chromium 也成为了国内多核浏览器的高速核心的最佳选择。 除了速度一流之外,<em>Chrome</em> 对新技术是支持的最积极的一个,它的发展
2021-05-29 09:00:44
我相信每个人都知道计算机上安装的Windows系统是活动的。有些朋友不知道安装或升级到20H2版后是否已被激活,那么如何查看20H2未激活?以下是每个人的详细观看方法。 具体步骤如下: 1.在<em>Windows10</em>系统桌面中,
2021-05-29 09:00:05
而且相比于苹果<em>Mac</em> OS和iOS的生态封闭,鸿蒙操作系统可以随时应用于智能手机。除此之外,苹果和安卓的系统主要还是基于宏内核技术。而鸿蒙使用的技术则恰好相反,其使用的微内核技术。微内核技术开发不但容易,而且
2021-05-29 08:31:03
续航能力一直是<em>iPhone</em>的短板,苹果为了追求超薄时尚的特点,不得不以牺牲电池容量为代价,<em>iPhone</em>的体积虽然降低了,但是续航问题也受到了影响,如何生产出一款体积小容量大的电池成为了苹果公司一直追求的目
2021-05-29 08:30:43