摘要:以這種方式調(diào)用構(gòu)造函數(shù)實(shí)際上會(huì)經(jīng)歷以下個(gè)步驟創(chuàng)建一個(gè)新對(duì)象將構(gòu)造函數(shù)的作用域賦給新對(duì)象因此就指向了這個(gè)新對(duì)象執(zhí)行構(gòu)造函數(shù)中的代碼為這個(gè)新對(duì)象添加屬性返回新對(duì)象。
JS 高程中的解釋
要?jiǎng)?chuàng)建 Person 的新實(shí)例,必須使用 new 操作符。以這種方式調(diào)用構(gòu)造函數(shù)實(shí)際上會(huì)經(jīng)歷以下 4 個(gè)步驟:
(1) 創(chuàng)建一個(gè)新對(duì)象;
(2) 將構(gòu)造函數(shù)的作用域賦給新對(duì)象(因此 this 就指向了這個(gè)新對(duì)象);
(3) 執(zhí)行構(gòu)造函數(shù)中的代碼(為這個(gè)新對(duì)象添加屬性);
(4) 返回新對(duì)象。
看了這個(gè)原理,想試著寫(xiě)下實(shí)現(xiàn)過(guò)程,雖然不夠嚴(yán)謹(jǐn)。至少核心思想是體現(xiàn)出來(lái)了。
模擬實(shí)現(xiàn):
// 先寫(xiě)一個(gè)構(gòu)造函數(shù) function Person (name){ this.name = name } // myNew 方法實(shí)現(xiàn) function myNew(fn){ let obj = Object.create(fn.prototype) // 創(chuàng)建一個(gè)對(duì)象,并將構(gòu)造函數(shù)的原型對(duì)象賦給新創(chuàng)建的對(duì)象,即生成的實(shí)例與構(gòu)造函數(shù)的原型對(duì)象關(guān)聯(lián) let res = fn.apply(obj, Array.prototype.slice.call(arguments, 1)) // 函數(shù)執(zhí)行(為該對(duì)象賦屬性) return obj // 返回該對(duì)象 } console.log(p1 instanceof Person) // true console.log(myNew(Person, "Tom")) // Person{ "name":"Tom" }
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/104052.html
很早就聽(tīng)說(shuō)python的赫赫大名了,這學(xué)期學(xué)校也開(kāi)了這門(mén)課,正好可以感受一下這門(mén)語(yǔ)言的魅力,對(duì)比C/C++/JAVA,它到底有什么獨(dú)特的地方呢? Life is short, you need Python --Bruce Eckel人生苦短,我用python 一. 初印象:short 曾經(jīng)有這樣一個(gè)段子,說(shuō)聯(lián)合國(guó)同樣一份檔案,用五大官方語(yǔ)言寫(xiě)的不同版本中,最薄的那份一定是漢語(yǔ)的。 這個(gè)段子...
摘要:一表達(dá)式匿名內(nèi)部類(lèi)最大的問(wèn)題在于其冗余的語(yǔ)法,比如前面的中五行代碼僅有一行是在執(zhí)行任務(wù)??偨Y(jié)基于詞法作用域的理念,表達(dá)式不可以掩蓋任何其所在上下文的局部變量。 轉(zhuǎn)載請(qǐng)注明出處:https://zhuanlan.zhihu.com/p/20540175 在介紹Lambda表達(dá)式之前,我們先來(lái)看只有單個(gè)方法的Interface(通常我們稱(chēng)之為回調(diào)接口): public interface...
摘要:時(shí)間一晃就是數(shù)月,齊云早已把界基本情況了解了,不過(guò)至于三座大山里隱藏的謎團(tuán)卻遲遲沒(méi)有頭緒。它是界本源之一。事實(shí)上,根本沒(méi)有構(gòu)造函數(shù),或者人人都是構(gòu)造函數(shù)。所以,明白這個(gè)界的一界本源,才能在這里暢游天地之間。 自計(jì)算機(jī)宇宙誕生以來(lái),有很多大神通者在這里開(kāi)天辟地,開(kāi)創(chuàng)了很多界,有C、C++、Java等世界,它們彼此相連,其中有一處叫做JavaScript的世界,自被開(kāi)辟以來(lái)吸引了很多修行者...
摘要:面向?qū)ο笤O(shè)計(jì)里的設(shè)計(jì)模式之代理模式,相信很多朋友已經(jīng)很熟悉了。代表當(dāng)前執(zhí)行方法的實(shí)例,即方法調(diào)用者。代表具體的方法名稱(chēng)?,F(xiàn)在我們?cè)俅握{(diào)用,傳入構(gòu)造器返回的代理對(duì)象打印輸出,代理邏輯生效了和的一樣優(yōu)雅地實(shí)現(xiàn)了代理設(shè)計(jì)模式。 showImg(https://segmentfault.com/img/remote/1460000016760603);面向?qū)ο笤O(shè)計(jì)里的設(shè)計(jì)模式之Proxy(代理...
摘要:在編程文化中,我們有一個(gè)名為面向?qū)ο缶幊痰臇|西,這是一組技術(shù),使用對(duì)象和相關(guān)概念作為程序組織的中心原則。這是構(gòu)造器函數(shù)的作用。因此,上面的類(lèi)聲明等同于上一節(jié)中的構(gòu)造器定義。 來(lái)源:ApacheCN『JavaScript 編程精解 中文第三版』翻譯項(xiàng)目原文:The Secret Life of Objects 譯者:飛龍 協(xié)議:CC BY-NC-SA 4.0 自豪地采用谷歌翻譯 部分參考...
閱讀 1322·2023-04-25 18:57
閱讀 2231·2023-04-25 16:28
閱讀 4052·2021-11-24 09:39
閱讀 3708·2021-11-16 11:45
閱讀 1943·2021-10-13 09:40
閱讀 1313·2019-08-30 15:52
閱讀 1788·2019-08-30 10:57
閱讀 720·2019-08-29 16:55