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