国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

手動實現一個new操作符理解

lentoo / 1602人閱讀

手動實現一個new操作符理解

網上看了一些手動實現new操作符的方法和效果,現在來總結下

第一種方法
    function new1(func) {
        var newObj = Object.create(func.prototype);    // 創建一個繼承自func.prototype的新對象
        var returnObj = func.apply(newObj, Array.prototype.slice.call(arguments, 1));   //截取new1函數第二個以及第二個之后的參數,在newObj作用域內執行改造函數func
        if ((typeof returnObj === "object" || typeof returnObj === "function") && ret !== null) {
            return returnObj;
        }   //如果傳入參數中的構造函數執行后的returnObj是“對象”類型(比如new1(Object)),那么這個對象會取代newObj作為返回的對象
        return newObj;
    }
第二種方法
function new2(func) {
        return function() {
            let newObj = {
                __proto__: func.prototype    // 新生成一個對象,且新對象的原型對象繼承自構造對象的原型對象
            }
            var returnObj =func.apply(obj, arguments)   // 以第二次執行函數的參數,在obj作用域中執行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)

在控制臺中查看結果

沒有區別。
再假定一個自定義的構造函數進行對比

    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)

對比結果


也沒有區別。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/103350.html

相關文章

  • 一名【合格】前端工程師的自檢清單

    摘要:在他的重學前端課程中提到到現在為止,前端工程師已經成為研發體系中的重要崗位之一。大部分前端工程師的知識,其實都是來自于實踐和工作中零散的學習。一基礎前端工程師吃飯的家伙,深度廣度一樣都不能差。 開篇 前端開發是一個非常特殊的行業,它的歷史實際上不是很長,但是知識之繁雜,技術迭代速度之快是其他技術所不能比擬的。 winter在他的《重學前端》課程中提到: 到現在為止,前端工程師已經成為研...

    羅志環 評論0 收藏0
  • 一名【合格】前端工程師的自檢清單

    摘要:在他的重學前端課程中提到到現在為止,前端工程師已經成為研發體系中的重要崗位之一。大部分前端工程師的知識,其實都是來自于實踐和工作中零散的學習。一基礎前端工程師吃飯的家伙,深度廣度一樣都不能差。開篇 前端開發是一個非常特殊的行業,它的歷史實際上不是很長,但是知識之繁雜,技術迭代速度之快是其他技術所不能比擬的。 winter在他的《重學前端》課程中提到: 到現在為止,前端工程師已經成為研發體系...

    isaced 評論0 收藏0
  • 深入理解控制反轉(IoC)和依賴注入(DI)

    摘要:本文一大半內容都是通過舉例來讓讀者去理解什么是控制反轉和依賴注入,通過理解這些概念,來更加深入。這種由外部負責其依賴需求的行為,我們可以稱其為控制反轉。工廠模式,依賴轉移當然,實現控制反轉的方法有幾種。 容器,字面上理解就是裝東西的東西。常見的變量、對象屬性等都可以算是容器。一個容器能夠裝什么,全部取決于你對該容器的定義。當然,有這樣一種容器,它存放的不是文本、數值,而是對象、對象的描...

    HollisChuang 評論0 收藏0
  • php實現依賴注入(DI)和控制反轉(IOC)

    摘要:工廠模式,依賴轉移當然,實現控制反轉的方法有幾種。其實我們稍微改造一下這個類,你就明白,工廠類的真正意義和價值了。雖然如此,工廠模式依舊十分優秀,并且適用于絕大多數情況。 此篇文章轉載自laravel-china,chongyi的文章https://laravel-china.org/top...原文地址: http://www.insp.top/learn-lar... ,轉載務必保...

    tomato 評論0 收藏0
  • 手動實現bind函數(附MDN提供的Polyfill方案解析)

    摘要:被調用時,等參數將置于實參之前傳遞給被綁定的方法。它返回由指定的值和初始化參數改造的原函數拷貝。一個綁定函數也能使用操作符創建對象這種行為就像把原函數當成構造器。其實這個思路也是庫如何實現繼承的方法。他的函數如下最后一步是將的指回。 update: 2018-06-08 原文鏈接 為什么要自己去實現一個bind函數? bind()函數在 ECMA-262 第五版才被加入;它可能無法在所...

    idisfkj 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<