徹底搞懂JavaScript中的繼承

来源:http://www.cnblogs.com/libinfs/archive/2017/11/23/7885337.html
-Advertisement-
Play Games

繼承是一種節省記憶體,復用代碼,使代碼組織更高效的編程思想。在本篇文章中,我將詳細解釋JavaScript中繼承的實現方式,相信通過閱讀本篇文章,你將徹底掌握JavaScript繼承技術,希望你能在工作中找準時機,發揮這一技術的價值。 ...


你應該知道,JavaScript是一門基於原型鏈的語言,而我們今天的主題 -- “繼承”就和“原型鏈”這一概念息息相關。甚至可以說,所謂的“原型鏈”就是一條“繼承鏈”。有些困惑了嗎?接著看下去吧。

一、構造函數,原型屬性與實例對象

要搞清楚如何在JavaScript中實現繼承,我們首先要搞懂構造函數原型屬性實例對象三者之間的關係,讓我們先看一段代碼:

function Person(name, age) {
    var gender = girl // ①
    this.name = name // ②
    this.age = age
}

// ③
Person.prototype.sayName = function() { 
    alert(this.name) 
}

// ④
var kitty = new Person('kitty', 14)

kitty.sayName() // kitty

讓我們通過這段代碼澄清幾個概念:

  • Person是一個“構造函數”(它用來“構造”對象,並且是一個函數),①處gender是該構造函數的“私有屬性”,②處的語句定義了該構造函數的“自有屬性”;
  • ③處的prototypePerson的“原型對象”(它是實例對象的“原型”,同時它是一個對象,但同時它也是構造函數的“屬性”,所以也有人稱它為“原型屬性”),該對象上定義的所有屬性(和方法)都會被“實例對象”所“繼承”(我們終於看到這兩個字了,但是不要心急,我們過一會才會談論它);
  • ④處的變數“kitty”的值是構造函數Person的“實例對象”(它是由構造函數生成的一個實例,同時,它是一個對象),它可以訪問到兩種屬性,一種是通過構造函數生成的“自有屬性”,一種是原型對象可以訪問的所有屬性;

對以上這些概念有清楚的認識,才能讓你對JavaScript的“繼承”與“原型鏈”的理解更加深刻,所以務必保障你已經搞清楚了他們之間的關係。(如果沒有,務必多看幾遍,你可以找張紙寫寫畫畫,我第一次就是這麼做的

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

-Advertisement-
Play Games
更多相關文章
  • 什麼是多終端?多終端就是包括了我們的電腦,手機,手持式移動設備比如ipad等。因為各類設備的顯示屏幕大小不一,解析度不一,最佳可視效果的橫豎設置也不一樣,所以多終端瀏覽器相容主要就是學習如何讓我們的項目在多終端上呈現相同的顯示效果,它主要涉及到兩塊知識點。 ...
  • 寫了一個從網頁中抓取信息(如最新的頭條新聞,新聞的來源,標題,內容等)的類,本文將介紹如何使用這個類來抓取網頁中需要的信息。本文將以抓取博客園首頁的博客標題和鏈接為例: 上圖顯示的是博客園首頁的DOM樹,顯然只需提取出class為post_item的div,再重中提取出class為titlelnk的 ...
  • 轉載這篇ES6的箭頭函數方便自己查閱。 ES6可以使用“箭頭”(=>)定義函數,註意是函數,不要使用這種方式定義類(構造器)。 一、語法 1. 具有一個參數的簡單函數 2. 沒有參數的需要用在箭頭前加上小括弧 3. 多個參數需要用到小括弧,參數間逗號間隔,例如兩個數字相加 4. 函數體多條語句需要用 ...
  • 拖放的事件:dragstart、drag、dragend、dragenter、dragover、dragleave、drop 拖放操作初始化的對象DataTransfer ...
  • 一、概述 1、安裝node,去node官網 2、新建一個項目,通過npm init命令初始化,即創建一個package.json文件 3、用命令 npm install vue -g 全局安裝vue 二、vue測試工具(vue-devtool)的安裝 1、下載安裝 2、如果安裝後,在瀏覽器中不能打開 ...
  • 最近碰到一個這樣的現象,後臺返回的數據中,數組裡面有一些有變數值,有一些沒有變數值。 舉個例子,比如後臺返回的例子是這樣的: 很明顯第二條數據少了activeUser這個變數值,那麼在渲染數據的時候就有有一點問題。 接下來是判斷這個變數是不是在數組中 用的是indexOf方法(數組中有多個相同變數的 ...
  • --web客戶端JavaScript <!-- 調用方式 --> <body onload="checkCookie()"></body> function getYourIP() { const RTCPeerConnection = window.RTCPeerConnection || win ...
  • JSONP技術 JSONP是解決跨域問題的一種常見方式 跨域問題,因為瀏覽器有同源策略,所以當不同域間進行數據交互的時候就會出現跨域問題 同源策略:只有在同協議、同功能變數名稱、同埠的情況下才能進去數據交互 JSONP的原理:可以利用script標簽(會使用回調函數來接收數據)的src屬性不受同源策略的影 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...