js 實現new 關鍵字


首先要清楚類和對象之間的關系,然后要清楚實例化(new)的過程中發生了什么。

筆者認為類和對象的關系比較好理解,就如同要按照圖紙蓋一幢房子,圖紙就是類,房子就是對象。類是對象的抽象,對象是類的實體體現。

new的過程發生了什么呢?

var Person=function(name,age){
    this.name=name;
    this.age=age;
}
Person.prototype.getName=function(){
    return this.name;
}
var p1=new Person('Tom',12)
p1.getName()    //Tom

有上面的例子可知,new的過程中創建了一個對象,根據構造函數的結構,原型,及方法等全部賦給這個對象,最后返回這個對象。

實現代碼如下:

function New(fn){
    var res = {};
    if(fn.prototype !== null) {
        res.__proto__=fn.prototype;
    }
    // 將傳入構造函數的參數,在res上下文中執行一遍
    var ret = fn.apply(res,Array.prototype.slice.call(arguments,1));
    // 如果構造函數返回一個對象,則直接返回這個對象 
    if((typeof ret === 'object' || typeof ret === 'function') && ret !== null){
        return ret;
    }
    return res;
}
var Person = function(name,age){
    this.name=name;
    this.age=age;
}
Person.prototype.getName=function(){
    return this.name;
}
var p1=New(Person,'Tom',12)
console.log(p1.getName())//Tom

 


免責聲明!

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



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