面向對象筆記2 原型鏈 解釋

来源:http://www.cnblogs.com/YinWeiBlog/archive/2017/08/25/7426076.html
-Advertisement-
Play Games

面向對象2 ## js中已經寫好的構造函數 * 內置對象 * js提供的已經定義好的對象 * Array,Date,RegExp,String,Number,Boolean * 同時js定義好了對應的一些構造函數 * * 字元串,數字等基礎類型數據是沒有屬性和方法的。 * ??那麼我們平時創建了一個 ...


面向對象2

## js中已經寫好的構造函數

* 內置對象

* js提供的已經定義好的對象

* Array,Date,RegExp,String,Number,Boolean

* 同時js定義好了對應的一些構造函數

* * 字元串,數字等基礎類型數據是沒有屬性和方法的。

* ??那麼我們平時創建了一個字元串(非字元串對象)的時候,為什麼可以調用他length,indexOf等屬性或方法??

* 上面問題的答案就是:包裝對象

* * 包裝對象

* 當我們去調用字元串,數字,布爾值這三種基礎數據類型的屬性和方法的時候,他們本身是不具備屬性和方法的,

但是js內部,會自動的去調用他們對象的構造函數,然後把他們的值作為參數進行傳入,然後執行對應屬性或方法,並把結果進行返回

* 包裝對象一共有三個: * String,Number,Boolean

函數原型鏈

## 個人對函數原型鏈的理解

**註意__proto__這個對象在每個對象中都存在

而通過 new object()創造的對象的__proto__是沒有prototype的 為構造函數的最頂層。

首先確定一個函數為構造函數 如 function construction(){ 在構造函數創建時會創建一個空對象{},函數中的this 指向該空對象 輸出的值也為該空對象

同時構造函數中也有一個prototype對象該對象是由 var prototype=new object() ;

生成的 所以 object 為prototype的構造函數 } 通過 var fn = new construction();來調用(所謂構造函數和一般函數的區別就是用new來調用)

那麼此時的fn就為構造函數輸出的this對象指向的對象 fn.x(通過fn.x來調用x方法)判斷呢this對象中是否有x 若沒有則查看this對象中的__proto__對象中是否有這個方法

this中的__proto__指向的是構造函數中的prototype這個對象查看prototype中是否存在這個方法 若沒有查看prototype對象中的__proto__是否存在

而構造函數中的prototype的__proto__指向的是創造prototype這個對象的js自己封裝的object()這個函數中的prototype

再在其中尋找是否存在x方法若沒有在其中的__proto__中尋找 若沒有就返回underfined;

與原型鏈有關的一些方法

hasOwnProperty() * 判斷某個屬性(方法)是否是某個對象自有的,就是非原型鏈上的 constructor

* 屬性:返回某個對象的構造函數 instanceof

* 運算符 * 判斷一個對象是否是某個構造函數的實例化對象 返回布爾值。

面向對象的繼承

我們先創建了一個構造函數,可以應用於某些元素 但我們有其他元素的應用需要在之前的構造函數上進行添加那麼我們就要用到繼承列

function Drag(element){//為原構造函數 }

function DragLimit(element) {//需要在原構造函數上進行添加的新構造函數

// 調用Drag函數,並把Drag中this指向DragLimit的this Drag.call(this, element);

//改變this指向 讓Drag函數中的this指向改變指向當前 for (var property in Drag.prototype) {在通過for in 賦值來 讓DragLimit()中的

內容等於Drag中內容 console.log(property);

// forin不只是會把Drag.prototype自身的屬性迴圈出來,還會把一些原型鏈上的屬性和方法也迴圈

出來 if (Drag.prototype.hasOwnProperty(property)) { DragLimit.prototype[property] = Drag.prototype[property]; } };

為什麼不通過賦值DragLimit.prototype = Drag.prototype;來做呢 因為在object類型中(數組 對象)若通過賦值 那麼你改變賦值的對象中的內容

原對象的內容也會被改變。 為什麼呢,解釋。 當我們在js中通過var申請並賦值時 我們會在記憶體中申請一個位置來存放 我們的var 的東西 如var a=1;

但這個a所記錄的是1這個值在記憶體中存放的位置。 當我們通過var a=[1,2,3]時在記憶體中申請一個位置存放的是數組中的1這個值所在的位置,而[]

中這些內容被存放在記憶體中的另一個地方存放1的位置中同時也記錄了[]中2存放的位置依次類推。 當我們通過varb=a 讓b=a這個數組內容時 只不過是讓b記錄

a所記錄的是1這個值在記憶體中存放的位置 並不是新開闢一個地方在存放一組數組,所以b所使用的仍然是a中的數組的所以當b數組進行修改時修改的是a中存放

的這個內容 所以a也會發生改變。


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

-Advertisement-
Play Games
更多相關文章
  • Python 重載運算符 __add__ __radd__ __eq__ ...
  • 系統環境:Windows 10 ,python3.x 1.安裝mongodb mongodb下載官網:https://www.mongodb.com/download-center?jmp=nav#community 安裝教程網上很多,可以自行百度(http://www.cnblogs.com/lz ...
  • 1.數據結構 1.1 內置序列類型 四種序列類型: 1.容器序列:list、tuple和collections.deque 2.扁平序列:str、bytes、bytearray、memoryview和array.array 3.可變序列:list、bytearray、array.array、coll ...
  • 在web項目中調用webservice介面,以及創建自己的webservice服務端 由於甲方的伺服器並不在外網,編碼環境是不能直接訪問對方的webservice介面的,所以需要把wsdl文件下載到本地,在通過工具生成代理類。 用java的JDK自帶命令wsimport -s . xxx.wsdl生 ...
  • 1.文件下載 用ResponseEntity<byte[]> 返回值完成文件下載 具體參見本博客之前的《文件上傳下載》 2.自定義攔截器 Spring MVC也可以使用攔截器對請求進行攔截處理,用戶可以自定義攔截器來實現特定的功能,自定義的攔截器必 須實現HandlerInterceptor介面 1 ...
  • 在JSP中一共有9個隱含對象,這個9個對象我可以在JSP中直接使用。因為在service方法已經對這個九個隱含對象進行聲明及賦值,所以可以在JSP中直接使用。 - pageContext 類型:PageContext 代表:當前頁面的上下文 作用:可以獲取到頁面中的其他隱含對象,同時它還是一個域對象 ...
  • 動態表單的含義是不要手動定義,直接在配置文件中進行定義。 1.手動進行定義 2.利用配置文件進行定義 在action中使用它 這裡get的名字必須是在struts配置文件中定義的 ...
  • Java枚舉、靜態導入、自動拆裝箱、增強for迴圈、可變參數 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...