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