js new都做了什麼 prototype __proto__

来源:http://www.cnblogs.com/liulin0524/archive/2016/04/08/5364499.html
-Advertisement-
Play Games

現在對自己之前理解的東西,總結下,整理到這,看我那會畫的一張圖,我都不知道在說什麼,那會的瞬間都疏通的感覺,現在基本都模糊了,我這腦子真是。。。 言歸正傳 開始: 一:思考new都做了什麼,下麵一個例子 new一個構造函數, 1:會先新建一個對象,比如 var o={}; 2:然後o對象的__pro ...


現在對自己之前理解的東西,總結下,整理到這,看我那會畫的一張圖,我都不知道在說什麼,那會的瞬間都疏通的感覺,現在基本都模糊了,我這腦子真是。。。

言歸正傳 開始:

一:思考new都做了什麼,下麵一個例子 

function A (){
        var a1=111;
        this.a2=222;
        function fa(){
            console.log(a1);
        }
        fa();
    }
A.prototype.a3="333";
var b = new A();

  new一個構造函數,

  1:會先新建一個對象,比如 var o={};

  2:然後o對象的__proto__=A函數的prototype,

  3:以o為執行環境執行A,A.apply(o,[arg])

    apply是什麼,就是執行時,改變執行上下文,把A執行環境中的this 變成o,

    看到很多地方說,apply與call的區別,我認為區別就是他們兩個傳參不同,apply是數組形式 :apply(obj,argument)argment是一個數組,call直接是值形式 :call(obj,name,age)

 

  4:看A函數返回值的情況,然後b是什麼,針對上一個的例子,b指向 {a2:222} ,裡面的__proto__ ,constructor等一會說 

 

        文章中黃色部分不大理解,按說他是系統生成的o對象,但是他為什麼是A{}?

 

    現在來看a方法返回值的各種情況的列子,來看b是什麼

    1:什麼不返回的情況 

    

    2:返回 數據類型的情況

      

    3:返回 引用類型的情況

    

   總結,當new一個函數時,如果函數有返回,如果是數據類型,直接忽視,返回系統生成的對象,如果返回的複雜數據類型,那麼就是複雜數據類型,如果沒有返回,就是系統生成的對象

二 prototype

  每個函數都有prototype(原型)屬性,他的值是對象(屬性集合)

  

  只有一個constructor 屬性,指向本身,既然他的值是對象,包括constructor和__proto__屬性,同時可以自定義屬性,例如:

  

 

三:__proto__

  __proto__是隱形屬性,每個對象都有這個屬性,實例化對象的__proto__值是指向該對象的prototype

  

 四:自定函數 對象 Object Function他們之間prototype __proto__的聯繫

 

  註意自定義函數b的prototype屬性集合中的__proto__,或是說整個prototype是對象,他的__proto__,指向的是最底層的Object對象,如果下麵這種new的情況,

var a = function() { this.a1="a";};
var b = function() { this.b1="b";};
var c = function() { this.c1="c";};
b.prototype = new a();
c.prototype = new b();

  b.prototype={a1:"a"};

  b.prototype.__proto__=a.prototype ,a.prototype的值 是constructor 和__proto__(指向的是最底層的Object{}),

  c.prototype={b1:"b"};

  c.prototype.__proto__=b.prototype ——》指向{a1:"a"};

 

不知道有沒有理解不對的地方啊啊啊啊啊。。。。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • [Laravel] Laravel的基本HTTP路由 使用Laravel的基本路由,實現get請求響應,找到文件app/Http/routes.php 調用Route的靜態方法get(),實現get響應,參數:string類型的路徑,匿名函數function(){} 匿名函數內部,返回string數 ...
  • ...
  • 橋接模式(Bridge) 定義 橋接模式(Bridge),將抽象部分與它的實現部分分離,使它們都可以獨立地變化。 類圖 描述 Abstraction:定義抽象部分的介面,通常在這個介面裡面要維護一個實現部分的對象引用;在抽象部分的方法裡面需要調用實現部分的方法,這個抽象部分的方法裡面通常都是跟具體的 ...
  • 原文 http://a317222029201405212739.iteye.com/blog/2174140 引自 http://www.tuicool.com/articles/aeye6rY less大家都知道是什麼了,現在比較流行的編譯器就是koala nodejs來解決。koala就不多說 ...
  • Location對象 location用於獲取或設置窗體的URL,並且可以用於解析URL。 語法: location.[屬性|方法] Location對象屬性 Location對象方法: Navigator對象 Navigator 對象包含有關瀏覽器的信息,通常用於檢測瀏覽器與操作系統的版本。 查看 ...
  • 1.webservice方法 2.webservice網站web.config配置 <?xml version="1.0" encoding="utf-8"?><!-- 有關如何配置 ASP.NET 應用程式的詳細信息,請訪問 http://go.microsoft.com/fwlink/?Link ...
  • 原址:http://www.cnblogs.com/wangfupeng1988/p/3977924.html 作者:王福朋 (1) 值類型的類型判斷用typeof: console.log(typeof(10)); // number undefined, number, string, bool ...
  • 前言 今天想要用nodejs 寫個後臺服務,很久之前看過node express 框架,可真當向下手安裝的時候,發現好多命令都不記得了。寫完後臺服務,沒事了,總結了下安裝過程,記錄一下,以便以後查閱方便。 Express 4.0 安裝 express4.0 版本已經把命令行工具分離出來,我們在命令行 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...