JavaScript手寫new方法

1.看一下正常使用的new方法函數

function father(name){ this.name=name; this.sayname=function(){ console.log(this.name) } } var son=new father('kimi') dog.sayname();

輸出結果:this

kimi

 

2.手寫一個new方法spa

function father(name){ this.name=name; this.sayname=function(){ console.log(this.name) } } function myNew(ctx, ...args){ // ...args爲ES6展開符,也可使用arguments
    //先用Object建立一個空的對象
    let obj=new Object(); //新對象會被執行prototype鏈接
    obj.__proto__=ctx.prototype; //新對象和函數調用的this綁定起來
    let res=ctx.call(obj,...args); //判斷函數返回值若是是null或者undefined則返回obj,不然就放回res
    return res instanceof Object?res:obj; } var son=myNew(father,'kimi') son.sayname();

輸出結果:prototype

kimi

 

3.總結:code

new一個對象的過程是:對象

1>建立一個空對象blog

2>對新對象進行[prototype]綁定(即son._proto_=father.prototype)io

3>新對象和函數調用的this會綁定起來console

4>執行構造函數中的方法function

5>若是函數沒有返回值則自動返回這個新對象

相關文章
相關標籤/搜索