1. 程式人生 > 其它 >JS中new的過程發生了什麼以及實現過程

JS中new的過程發生了什麼以及實現過程

舉一個簡單例子

// 建構函式
function WhatNew(name) {
  this.name = name  
}

let news = new WhatNew('小韭菜');

  通過建構函式建立的物件,原理是原型鏈的存在,每個建構函式都有一個prototype屬性,它指向建構函式的指標constructor,而__proto__是每個物件都包含的一個方法,它也執行constructor。

WhatNew.prototype === news.__proto__

物件的繼承是通過原型鏈,而原型鏈就是通過__proto__一層一層的往上找而形成的鏈式結構,直到最後找到null。

那麼new的過程發生了什麼?

1、new先建立了一個物件

var news = new Object()

2、我們將這個空物件的__proto__屬性指向whatnew建構函式的prototype屬性

new.__proto__ = whatnew.prototype

3、修改whatnew的this到object上面,call/apply,並把引數傳入

4、最後把object返回給mynew就可以了

實現一個new方法

function Mynew(fun, ...arg) {
  let obj = {
        __proto__: fun.prototype 
  }  
  fun.apply(obj, arg)
  
return obj } function person(age, name) { this.age = age this.name = name } let mynew = Mynew(person, 18, '小韭菜')