淺談JavaScript的New關鍵字

来源:http://www.cnblogs.com/fangshidaima/archive/2016/08/25/5808050.html
-Advertisement-
Play Games

原型和閉包算是JavaScript中最常見,最難以理解,最容易被當做問題的兩個部分,當然還有它們的延伸,如作用域鏈,繼承等等吧,我最近也是各種看,各種翻,記錄點自己的心得,寫寫總會讓自己的理解更深一些。(跟標題的關係不大啦,就感慨句,每次總感覺自己懂了,再翻還是收穫滿滿) 先談一下JavaScrip ...


  原型閉包算是JavaScript中最常見,最難以理解,最容易被當做問題的兩個部分,當然還有它們的延伸,如作用域鏈,繼承等等吧,我最近也是各種看,各種翻,記錄點自己的心得,寫寫總會讓自己的理解更深一些。(跟標題的關係不大啦,就感慨句,每次總感覺自己懂了,再翻還是收穫滿滿)

  先談一下JavaScript中New關鍵字吧,通常我們通過它來創建一個類的實例對象,在JavaScript中,實例化對象之後,也就繼承了類的屬性以及方法。通過代碼來演示一下

function Person(name){
  this.name = name;
}
Person.age= "23";
Person.prototype.say = function(){
  console.log("I'm " + this.name);
};
var person= new Person("王方");
 
console.log(
  person.name, //王方
  person.height //undefined
);
person.say(); //I'm 王方
 
console.log(
  Person.name, //Person
  Person.age//23
);
Person.say(); //Person.say is not a function

我們看下這一行

var person= new Person("王方");

new 到底做了什麼呢?恩 JS引擎做的工作就是下麵這樣 

var obj = {};
obj.__proto__ = Person.prototype;
var result = Person.call(obj,"王方");
return typeof result === 'obj'? result : obj;

1.首先創建一個新對象

2.把obj的__proto__ 指向Person的原型對象prototype,此時便建立了obj對象的原型鏈:obj->Person.prototype->Object.prototype->null

3.在obj對象的執行空間調用Person函數並傳遞參數“王方”。 相當於var result = obj.Person("王方")。當這句執行完之後,obj便產生了屬性name並賦值為"王方"。

4.判斷返回值,如果無返回值或者返回一個非對象值,就將obj返回,否則講返回值作為新對象返回(有點繞口,三元運算符,自己看下吧)

總結:

Javascript的new關鍵字主要的作用是繼承,如上例子所言,但是要記住一點,Person是一個函數,而person是一個對象,至於函數與對象之間的區別,我有時間再寫吧。

 


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

-Advertisement-
Play Games
更多相關文章
  • 代理模式、中介者模式 代理模式 在面向對象設計中,有一個單一職責原則,指就一個類(對象、函數)而言,應該僅有一個引起它變化的原因。如果一個對象承擔了過多的職責,就意味著它將變得巨大,引起它變化的原因就多,它把這些職責耦合到了一起,這種耦合會導致程式難於維護和重構。 這時候,我們可以把該對象(本體)的 ...
  • 1. 開始使用 canvas 元素 canvas 元素非常簡單,這是指它所有的功能都體現在一個JavaScript對象上,因此該元素本身只有兩個屬性:width 和 height。 canvas 元素里的內容會在瀏覽器不支持此元素時作為備用內容顯示。下麵例子展示了canvas 元素和一些簡單的備用內 ...
  • 0.環境準備 (1)過渡需要瀏覽器的支持,使用這些屬性要加上瀏覽器廠商的首碼,我用的chrome49已經不需要首碼了, -o- Opera -webkit- Safari、Chrome -moz- Firefox -ms- IE (2) css p { height:15px;/*類似於高度這種屬性 ...
  • 單選/覆選框是 Web 應用常用控制項,隨處可見,原生的單/覆選框控制項的外觀一般都不怎麼美觀,有些時候,原生的控制項模樣並不能滿足設計要求,這時需要更為精緻的控制項樣式,我們更希望其樣式可以允許自定義。 CSS3 新增了一個偽類選擇器 ,用於選擇被勾選的單/覆選框,利用該選擇器可以分別為未選中和選中狀態的 ...
  • 首先必須要說的是,this的指向在函數定義的時候是確定不了的,只有函數執行的時候才能確定this到底指向誰,實際上this的最終指向的是那個調用它的對象(這句話有些問題,後面會解釋為什麼會有問題,雖然網上大部分的文章都是這樣說的,雖然在很多情況下那樣去理解不會出什麼問題,但是實際上那樣理解是不准確的 ...
  • 上一篇談new關鍵字也是給這一篇寫關於原型的文章買個伏筆,我對原型的理解可能會有偏差,如有錯誤,望指正一定修改,望各位道友如果想真正的理解原型的概念一定要再看完各方言論再回歸教材。 言歸正傳談原型,首先原型是一個對象,無論什麼時候,只要創建了一個函數,就會按照規則創建一個Prototype屬性,這個 ...
  • [1]通用形式 [2]首尾索引 [3]奇偶索引 [4]範圍索引 ...
  • HTML5 支持直接在瀏覽器中播放音頻和視頻文件,不需要使用Abode Flash這樣的插件。 1. 使用 video 元素 可以用video 元素在網頁里嵌入視頻內容。 其基本用法如下: 此例顯示效果如下: 如果瀏覽器不支持video元素或者無法播放視頻那麼備用內容(開始和結束標簽之內的內容)就會 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...