手動(dòng)實(shí)現(xiàn)一個(gè)new操作符理解
網(wǎng)上看了一些手動(dòng)實(shí)現(xiàn)new操作符的方法和效果,現(xiàn)在來(lái)總結(jié)下
第一種方法function new1(func) { var newObj = Object.create(func.prototype); // 創(chuàng)建一個(gè)繼承自func.prototype的新對(duì)象 var returnObj = func.apply(newObj, Array.prototype.slice.call(arguments, 1)); //截取new1函數(shù)第二個(gè)以及第二個(gè)之后的參數(shù),在newObj作用域內(nèi)執(zhí)行改造函數(shù)func if ((typeof returnObj === "object" || typeof returnObj === "function") && ret !== null) { return returnObj; } //如果傳入?yún)?shù)中的構(gòu)造函數(shù)執(zhí)行后的returnObj是“對(duì)象”類(lèi)型(比如new1(Object)),那么這個(gè)對(duì)象會(huì)取代newObj作為返回的對(duì)象 return newObj; }第二種方法
function new2(func) { return function() { let newObj = { __proto__: func.prototype // 新生成一個(gè)對(duì)象,且新對(duì)象的原型對(duì)象繼承自構(gòu)造對(duì)象的原型對(duì)象 } var returnObj =func.apply(obj, arguments) // 以第二次執(zhí)行函數(shù)的參數(shù),在obj作用域中執(zhí)行func if ((typeof returnObj === "object" || typeof returnObj === "function") && returnObj !== null) { return returnObj; } //同理,returnObj是“對(duì)象”類(lèi)型(比如new1(Object)),那么這個(gè)對(duì)象會(huì)取代newObj作為返回的對(duì)象 return newObj } }和原生對(duì)象構(gòu)造方式對(duì)比
var object1 = new1(Object); var object2 = new2(Object)(); var object3 = new Object(); console.dir(object1) console.dir(object2) console.dir(object3)
在控制臺(tái)中查看結(jié)果
沒(méi)有區(qū)別。
再假定一個(gè)自定義的構(gòu)造函數(shù)進(jìn)行對(duì)比
function person(name, age) { this.name = name this.age = age } var obj1 = new1(person,"zhus",25); var obj2 = new2(person)("zhus",25); var obj3 = new person("zhus",25); console.dir(obj1) console.dir(obj2) console.dir(obj3)
對(duì)比結(jié)果
也沒(méi)有區(qū)別。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/103350.html
摘要:在他的重學(xué)前端課程中提到到現(xiàn)在為止,前端工程師已經(jīng)成為研發(fā)體系中的重要崗位之一。大部分前端工程師的知識(shí),其實(shí)都是來(lái)自于實(shí)踐和工作中零散的學(xué)習(xí)。一基礎(chǔ)前端工程師吃飯的家伙,深度廣度一樣都不能差。 開(kāi)篇 前端開(kāi)發(fā)是一個(gè)非常特殊的行業(yè),它的歷史實(shí)際上不是很長(zhǎng),但是知識(shí)之繁雜,技術(shù)迭代速度之快是其他技術(shù)所不能比擬的。 winter在他的《重學(xué)前端》課程中提到: 到現(xiàn)在為止,前端工程師已經(jīng)成為研...
摘要:在他的重學(xué)前端課程中提到到現(xiàn)在為止,前端工程師已經(jīng)成為研發(fā)體系中的重要崗位之一。大部分前端工程師的知識(shí),其實(shí)都是來(lái)自于實(shí)踐和工作中零散的學(xué)習(xí)。一基礎(chǔ)前端工程師吃飯的家伙,深度廣度一樣都不能差。開(kāi)篇 前端開(kāi)發(fā)是一個(gè)非常特殊的行業(yè),它的歷史實(shí)際上不是很長(zhǎng),但是知識(shí)之繁雜,技術(shù)迭代速度之快是其他技術(shù)所不能比擬的。 winter在他的《重學(xué)前端》課程中提到: 到現(xiàn)在為止,前端工程師已經(jīng)成為研發(fā)體系...
摘要:本文一大半內(nèi)容都是通過(guò)舉例來(lái)讓讀者去理解什么是控制反轉(zhuǎn)和依賴(lài)注入,通過(guò)理解這些概念,來(lái)更加深入。這種由外部負(fù)責(zé)其依賴(lài)需求的行為,我們可以稱(chēng)其為控制反轉(zhuǎn)。工廠模式,依賴(lài)轉(zhuǎn)移當(dāng)然,實(shí)現(xiàn)控制反轉(zhuǎn)的方法有幾種。 容器,字面上理解就是裝東西的東西。常見(jiàn)的變量、對(duì)象屬性等都可以算是容器。一個(gè)容器能夠裝什么,全部取決于你對(duì)該容器的定義。當(dāng)然,有這樣一種容器,它存放的不是文本、數(shù)值,而是對(duì)象、對(duì)象的描...
摘要:工廠模式,依賴(lài)轉(zhuǎn)移當(dāng)然,實(shí)現(xiàn)控制反轉(zhuǎn)的方法有幾種。其實(shí)我們稍微改造一下這個(gè)類(lèi),你就明白,工廠類(lèi)的真正意義和價(jià)值了。雖然如此,工廠模式依舊十分優(yōu)秀,并且適用于絕大多數(shù)情況。 此篇文章轉(zhuǎn)載自laravel-china,chongyi的文章https://laravel-china.org/top...原文地址: http://www.insp.top/learn-lar... ,轉(zhuǎn)載務(wù)必保...
摘要:被調(diào)用時(shí),等參數(shù)將置于實(shí)參之前傳遞給被綁定的方法。它返回由指定的值和初始化參數(shù)改造的原函數(shù)拷貝。一個(gè)綁定函數(shù)也能使用操作符創(chuàng)建對(duì)象這種行為就像把原函數(shù)當(dāng)成構(gòu)造器。其實(shí)這個(gè)思路也是庫(kù)如何實(shí)現(xiàn)繼承的方法。他的函數(shù)如下最后一步是將的指回。 update: 2018-06-08 原文鏈接 為什么要自己去實(shí)現(xiàn)一個(gè)bind函數(shù)? bind()函數(shù)在 ECMA-262 第五版才被加入;它可能無(wú)法在所...
閱讀 790·2023-04-25 17:33
閱讀 3645·2021-07-29 14:49
閱讀 2491·2019-08-30 15:53
閱讀 3445·2019-08-29 16:27
閱讀 2013·2019-08-29 16:11
閱讀 1041·2019-08-29 14:17
閱讀 2451·2019-08-29 13:47
閱讀 2028·2019-08-29 13:28