成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

JS為什么會有原型的概念?

開發 前端
因為早期的瀏覽器只能用來瀏覽,不具備與訪問者互動的能力。比如,如果網頁上有一欄"用戶名"要求填寫,瀏覽器就無法判斷訪問者是否真的填寫了,只有讓服務器端判斷。

[[402108]]

因為早期的瀏覽器只能用來瀏覽,不具備與訪問者互動的能力。比如,如果網頁上有一欄"用戶名"要求填寫,瀏覽器就無法判斷訪問者是否真的填寫了,只有讓服務器端判斷。

如果沒有填寫,服務器端就返回錯誤,要求用戶重新填寫,這太浪費時間和服務器資源了。

這個時候需要一門網頁腳本語言,這種腳本語言能夠完成一些簡單的操作,比如判斷用戶有沒有填寫表單。剛好這個時候是向對象編程(object-oriented programming)最興盛的時期,C++是當時最流行的語言,而Java語言也馬上推出。

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

但是,他不打算引入"類"(class)的概念,因為一旦有了"類",Javascript就是一種完整的面向對象編程語言了,這好像有點太正式了,而且增加了初學者的入門難度。

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

C++的寫法是:

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

Java的寫法是:

  1. 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

本文轉載自微信公眾號「前端人」,可以通過以下二維碼關注。轉載本文請聯系前端人公眾號。

 

責任編輯:武曉燕 來源: 前端人
相關推薦

2020-09-10 07:04:30

JSJavaScript 原型鏈

2020-08-02 22:54:04

Python編程語言開發

2017-03-09 11:15:18

LinuxRoot賬戶

2019-12-02 14:22:01

浪費云計算支出

2013-01-15 09:41:45

編程語言

2022-07-26 23:43:29

編程語言開發Java

2017-12-21 19:38:50

潤乾中間表

2021-12-20 14:42:39

程序員職業技術

2013-01-24 09:44:44

數據庫

2015-11-04 09:57:18

JavaScript原型

2019-02-27 16:00:48

JS原型原型鏈對象

2022-08-02 18:37:24

BI系統快照表

2022-12-09 14:34:40

程序員工資離職

2020-10-15 13:19:24

為什么會存在亂碼

2022-01-10 10:05:33

鍵盤屏幕內存

2020-03-31 16:30:09

JS語言ES 6

2020-04-02 09:01:54

JSES 6開發

2012-05-02 15:56:20

PHP

2020-05-28 07:50:18

重排序happens-befCPU

2015-05-18 15:08:08

多種程序設計語言程序設計語言
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧洲精品码一区二区三区免费看 | 日本三级在线 | 免费三级黄 | 日韩中文字幕一区二区三区 | 亚洲www啪成人一区二区麻豆 | 国产高潮好爽受不了了夜色 | 在线观看免费av网 | 91免费观看视频 | 欧美三级成人理伦 | 中文字幕一区二区三区四区 | 成人黄色av| 久久青青 | 日韩欧美中文字幕在线观看 | 日本精品视频一区二区三区四区 | 成人黄色在线观看 | 精品欧美一区二区三区久久久 | 日韩一区二区三区在线观看 | 亚洲欧洲精品一区 | 成人精品免费视频 | 国产在线精品一区二区 | 国产精品视频一二三区 | 无码一区二区三区视频 | 婷婷综合网 | 国产欧美日韩在线一区 | 国产精品美女久久久久久久网站 | 精品久久久久久久久久久 | 观看av| 国产成人精品一区二区三区网站观看 | 国产一伦一伦一伦 | 免费观看一级毛片 | 成人免费视频在线观看 | 久久久久国产精品人 | 91久久久精品国产一区二区蜜臀 | 黄色男女网站 | 日本精品视频 | 99热欧美 | 亚洲伊人久久综合 | 一区二区三区小视频 | 在线成人av | 激情欧美一区二区三区中文字幕 | 91久久国产综合久久 |