JS中new的自定義實現創建實例對象


我們都知道在JS中通常通過對象字面量和new關鍵字來創建對象,那么今天我就來給大家講講new是怎么創建實例對象的;首先創建一個構造函數;

function Person(name,age){

  this.name=name;  

  this.age=age;

};

var p=new Person('ck',16)

通過new可以創建構造函數Person的實例對象。那么我們怎么去實現這一功能的呢?下面就為大家揭曉謎底:

function New(fn){

   return function(){

    var obj={'__proto__':fn.prototype};

    fn.apply(obj,arguments);

    return obj;

}

}

var p1=New(Person)('chen',22)

p1.name;//打印chen 

p1.age;//打印22

p1 instanceof Person // true 驗證p1是否是Person的實例對象。 

這樣我們就可以自定義創建一個實例對象了。

1、首先呢通過創建一個New函數,該函數接收一個參數(要創建實例對象的構造函數);

2、然后函數內部返回一個匿名函數

3、匿名函數內部返回一個對象,該對象就是構造函數的實例對象;那么這里有一個問題就是我們要使New函數可以通用,那么就要知道每一個構造函數的實例對象的屬性;所以我在匿名函數的內部通過apply()方法用構造函數替換當前對象obj;同時將構造函數的執行上下文指向obj;故obj對象就繼承了構造函數的相關屬性。

好了,今天大概就分享一下這個吧,順便大家可以想下如果把obj對象的位置放到匿名函數的外面即New函數里面會有什么不同呢?

function New(fn){

   var obj={'__proto__':fn.prototype};

   return function(){

    fn.apply(obj,arguments);

    return obj;

}

}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM