深入理解javascript原型和閉包(3)——prototype原型

?轉載,原文地址http://www.cnblogs.com/wangfupeng1988/p/3978131.html

?

既typeof之后的另一位老朋友!

prototype也是我們的老朋友,即使不了解的人,也應該都聽過它的大名。如果它還是您的新朋友,我估計您也是javascript的新朋友。

?

關于原型的介紹,可以參考?http://www.cnblogs.com/ljchow/archive/2010/06/08/1753526.html

在咱們的第一節(深入理解javascript原型和閉包(1)——一切都是對象)中說道,函數也是一種對象。他也是屬性的集合,你也可以對函數進行自定義屬性。

不用等咱們去試驗,javascript自己就先做了表率,人家就默認的給函數一個屬性——prototype。對,每個函數都有一個屬性叫做prototype。

這個prototype的屬性值是一個對象(屬性的集合,再次強調!),默認的只有一個叫做constructor的屬性,指向這個函數本身。

如上圖,SuperType是是一個函數,右側的方框就是它的原型。

原型既然作為對象,屬性的集合,不可能就只弄個constructor來玩玩,肯定可以自定義的增加許多屬性。例如這位Object大哥,人家的prototype里面,就有好幾個其他屬性。

咦,有些方法怎么似曾相似?

對!別著急,之后會讓你知道他們為何似曾相識。

接著往下說,你也可以在自己自定義的方法的prototype中新增自己的屬性

        function Fn() { }Fn.prototype.name = '王福朋';Fn.prototype.getYear = function () {return 1988;};

看到沒有,這樣就變成了

沒問題!

但是,這樣做有何用呢? ——?解決這個問題,咱們還是先說說jQuery吧。

var $div = $('div');
$div.attr('myName', '王福朋');

以上代碼中,$('div')返回的是一個對象,對象——被函數創建的。假設創建這一對象的函數是 myjQuery。它其實是這樣實現的。

        myjQuery.prototype.attr = function () {//……};$('div') = new myjQuery();

不知道大家有沒有看明白。

如果用咱們自己的代碼來演示,就是這樣

復制代碼
        function Fn() { }Fn.prototype.name = '王福朋';Fn.prototype.getYear = function () {return 1988;};var fn = new Fn();console.log(fn.name);console.log(fn.getYear());
復制代碼

即,Fn是一個函數,fn對象是從Fn函數new出來的,這樣fn對象就可以調用Fn.prototype中的屬性。

因為每個對象都有一個隱藏的屬性——“__proto__”,這個屬性引用了創建這個對象的函數的prototype。即:fn.__proto__ === Fn.prototype

這里的"__proto__"成為“隱式原型”,下回繼續分解。

?

轉載于:https://www.cnblogs.com/focusxxxxy/p/6390667.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/372990.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/372990.shtml
英文地址,請注明出處:http://en.pswp.cn/news/372990.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

python 溫度 符號_Python通過小實例入門學習---1.0(溫度轉換)

1.安裝Python 3 下載地址: Welcome to Python.org?www.python.org 2.“溫度轉換”實例:攝氏度--->華氏度 / 華氏度--->攝氏度 TempConvert.py TempStr = input("請輸入帶有符號的溫度值:") if TempStr[-1] in ["f","F"]:C = (eval(Tem…

mysql 修改root密碼

1.找到配置文件my.ini ,然后將其打開,可以選擇用記事本打開 C:\Program Files (x86)\MySQL\MySQL Server 5.0 2.打開后,搜索mysqld關鍵字,找到后,在mysqld下面添加skip-grant-tables,保存退出。 PS&#x…

聯想計算機CDROM啟動,聯想電腦光驅啟動問題?

1、開機按del鍵或f2進入bios設置(不同主板按鍵不一樣,一般是DEL,也可能是F2,可以參考下主板說明),將計算機的啟動模式調成從光盤啟動。也就是從cdrom啟動,根據主板的不同,bios設置有所差異(一般是&#xff…

沒有J2EE容器的JNDI和JPA

我們希望通過盡可能簡單的設置來測試一些JPA代碼。 計劃僅使用Java和Maven,不使用應用程序服務器或其他J2EE容器。 我們的JPA配置需要兩件事才能成功運行: 數據庫來存儲數據, JNDI訪問數據庫。 這篇文章分為兩個部分。 第一部分顯示了如何…

string 大小寫轉換

STL的algorithm庫確實給我們提供了這樣的便利&#xff0c;使用模板函數transform可以輕松解決這個問題&#xff0c;開發人員只需要提供一個函數對象&#xff0c;例如將char轉成大寫的toupper函數或者小寫的函數tolower函數。 transform原型&#xff1a; 1 #include <string&…

linux服務器上svn的log_如何在 Centos 8 / RHEL 8 上安裝和配置 VNC 服務器 | Linux 中國...

在 Centos 8 和 RHEL 8 系統中&#xff0c;默認未安裝 VNC 服務器&#xff0c;它需要手動安裝。在本文中&#xff0c;我們將通過簡單的分步指南&#xff0c;介紹如何在 Centos 8 / RHEL 8 上安裝 VNC 服務器。-- Pradeep KumarVNC(虛擬網絡計算Virtual Network Computing)服務器…

怎么把網頁保存到本地計算機,在IE瀏覽器中,將網頁保存到本地計算機中,若只需保存其中的文字、超鏈接和表格信息,應該選擇的保存類型為( )...

2.(2017高一上東臺月考)閱讀下面一段資料&#xff0c;判斷在給出的幾種說法中不正確的是( )資料&#xff1a;IP電話與傳統電話IP電話是按國際互聯網協議規定的網絡技術內容開通的電話業務&#xff0c;中文翻譯為網絡電話或互聯網電話&#xff0c;它是利用國際互聯網Inetrnet為…

html_博客博主

csdn: 工匠若水 http://blog.csdn.net/yanbober yunama: IT藍豹&#xff1a;http://www.itlanbao.com/&#xff1b; http://ask.dcloud.net.cn/docs/; 博客園&#xff1a; https://www.cnblogs.com/guweiwei/category/965437.html轉載于:https://www.cnblogs.com/awkflf11/p/55…

Windows上的Java線程CPU分析

本文將為您提供一個教程&#xff0c;介紹如何在Windows OS上快速查明Java線程貢獻者與CPU嚴重問題有關。 Windows與Linux&#xff0c;Solaris和AIX等其他操作系統一樣&#xff0c;使您可以在進程級別監視CPU利用率&#xff0c;還可以監視在進程中執行任務的單個線程。 在本教程…

flask 繼承模版的基本使用1

轉載于:https://www.cnblogs.com/wanghaonull/p/6399492.html

東芝2303am維護清零_東芝打印機2303A怎樣清零

展開全部東芝e68a843231313335323631343130323136353331333365653137打印機是按照相關要求生產的正規產品&#xff0c;其清零方式與正規產品相同。因此此處將介紹常用的打印機清零方法。打印機清零一般分兩種&#xff1a;一種是手工清零&#xff0c;另一種是軟件清零。一、手工…

計算機日期函數公式大全,Excel技巧: 根據日期匯總月份的計算公式

在許多情況下&#xff0c;Excel記錄的數據將按照發生的日期進行記錄&#xff0c;但是根據日期記錄的數據將非常分散&#xff0c;通常需要每月匯總相應的數據. 在這種情況下&#xff0c;您需要將日期轉換為月份. 本文介紹了如何使用SUMPRODUCT函數按月匯總數據.公式提示在SUMPRO…

Java陷阱:內部類中的字段訪問

這本身不是一個“陷阱”&#xff0c;而是一個值得了解的實現細節。 假設我有一個帶有字段的內部類。 這樣的字段對于封閉的類是可見的&#xff0c;但是以下哪種方法是訪問它的最快方法&#xff1f; 注意&#xff01; 我只在這里查看生成的字節碼&#xff0c;而不考慮任何JIT優化…

coverity代碼檢測工具介紹_微服務測試之靜態代碼掃描

靜態代碼掃描為整個發展組織增加價值。無論您在開發組織中發揮的作用如何&#xff0c;靜態代碼掃描解決方案都具有附加價值&#xff0c;擁有軟件開發中所需要的尖端功能&#xff0c;最大限度地提高質量并管理軟件產品中的風險。背景微服務架構模式具有服務間獨立&#xff0c;可…

XML引入以及與html的區別

1.1 引入HTML: 負責網頁的結構 CSS&#xff1a; 負責網頁的樣式&#xff08;美觀&#xff09;Javascript&#xff1a; 負責在瀏覽器端與用戶進行交互。負責靜態的網頁制作的語言HTML語言特點&#xff1a;1&#xff09;由標簽組成。 <title> <p> <hr/> <br…

ADF:在任務流終結器中支持bean作用域

介紹 當我們需要在任務流消失之前完成一些最終工作&#xff08;干凈的資源&#xff0c;緊密的連接等&#xff09;時&#xff0c;這是使用任務流終結器的非常普遍的推薦做法。 和往常一樣&#xff0c;我們使用在任務流中聲明的托管bean。 托管Bean可以具有不同的范圍-請求&#…

Python 異常處理--raise函數用法

在Python中&#xff0c;要想引發異常&#xff0c;最簡單的形式就是輸入關鍵字raise&#xff0c;后跟要引發的異常的名稱。異常名稱標識出具體的類&#xff1a; Python異常處理是那些類的對象。執行raise語句時&#xff0c;Python會創建指定的異常類的一個對象。raise語句還可指…

大學計算機教學ppt數制,大學計算機基礎 第3講 數制及其相互轉換 國家精品課程課件(可編輯)...

大學計算機基礎第3講數制及其相互轉換國家精品課程課件PPT第1 章計算機基礎知識第3 講數制及其相互轉換主要教學內容數制的基本概念1 數制轉換2 小結3 學習目標1 理解數制的基本概念。2 掌握數制間的轉換。3 能夠靈活應用轉換關系完成數制之間的轉換。重點與難點不同數制之間的…

linux中匿名用戶怎么登陸_南京課工場IT培訓:Linux中vsftpd服務配置(匿名,用戶,虛擬用戶)...

vsftpd概述vsftpd 是“very secure FTP daemon”的縮寫&#xff0c;安全性是它的一個最大的特點。vsftpd 是一個 UNIX 類操作系統上運行的服務器的名字&#xff0c;它可以運行在諸如 Linux、BSD、Solaris、 HP-UNIX等系統上面&#xff0c;是一個完全免費的、開放源代碼的ftp服務…

Java _ JDK _ Arrays, LinkedList, ArrayList, Vector 及Stack

(最近在看JDK源碼&#xff0c;只是拿著它的繼承圖在看&#xff0c;但很多東西不記錄仍然印象不深&#xff0c;所以開始記錄JDK閱讀系列。) &#xff08;一&#xff09;Arrays Arrays比較特殊&#xff0c;直接繼承自Arrays -》List(Interface) -》Collection(Interface)。(Maybe…