摘要:以這種方式調用構造函數實際上會經歷以下個步驟創建一個新對象將構造函數的作用域賦給新對象因此就指向了這個新對象執行構造函數中的代碼為這個新對象添加屬性返回新對象。
JS 高程中的解釋
要創建 Person 的新實例,必須使用 new 操作符。以這種方式調用構造函數實際上會經歷以下 4 個步驟:
(1) 創建一個新對象;
(2) 將構造函數的作用域賦給新對象(因此 this 就指向了這個新對象);
(3) 執行構造函數中的代碼(為這個新對象添加屬性);
(4) 返回新對象。
看了這個原理,想試著寫下實現過程,雖然不夠嚴謹。至少核心思想是體現出來了。
模擬實現:
// 先寫一個構造函數 function Person (name){ this.name = name } // myNew 方法實現 function myNew(fn){ let obj = Object.create(fn.prototype) // 創建一個對象,并將構造函數的原型對象賦給新創建的對象,即生成的實例與構造函數的原型對象關聯 let res = fn.apply(obj, Array.prototype.slice.call(arguments, 1)) // 函數執行(為該對象賦屬性) return obj // 返回該對象 } console.log(p1 instanceof Person) // true console.log(myNew(Person, "Tom")) // Person{ "name":"Tom" }
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/104052.html
摘要:一表達式匿名內部類最大的問題在于其冗余的語法,比如前面的中五行代碼僅有一行是在執行任務??偨Y基于詞法作用域的理念,表達式不可以掩蓋任何其所在上下文的局部變量。 轉載請注明出處:https://zhuanlan.zhihu.com/p/20540175 在介紹Lambda表達式之前,我們先來看只有單個方法的Interface(通常我們稱之為回調接口): public interface...
摘要:面向對象設計里的設計模式之代理模式,相信很多朋友已經很熟悉了。代表當前執行方法的實例,即方法調用者。代表具體的方法名稱?,F在我們再次調用,傳入構造器返回的代理對象打印輸出,代理邏輯生效了和的一樣優雅地實現了代理設計模式。 showImg(https://segmentfault.com/img/remote/1460000016760603);面向對象設計里的設計模式之Proxy(代理...
摘要:在編程文化中,我們有一個名為面向對象編程的東西,這是一組技術,使用對象和相關概念作為程序組織的中心原則。這是構造器函數的作用。因此,上面的類聲明等同于上一節中的構造器定義。 來源:ApacheCN『JavaScript 編程精解 中文第三版』翻譯項目原文:The Secret Life of Objects 譯者:飛龍 協議:CC BY-NC-SA 4.0 自豪地采用谷歌翻譯 部分參考...
閱讀 1245·2023-04-25 18:57
閱讀 2127·2023-04-25 16:28
閱讀 3926·2021-11-24 09:39
閱讀 3631·2021-11-16 11:45
閱讀 1817·2021-10-13 09:40
閱讀 1260·2019-08-30 15:52
閱讀 1716·2019-08-30 10:57
閱讀 657·2019-08-29 16:55