js實現new的過程

2021-09-27 06:32:56 字數 889 閱讀 6875

function sayhello(who)

let t = new sayhello('mike')

console.log(t.__proto__===sayhello.prototype)

console.log(t.message)

執行結果:

mike say hello, undefined

true

***

1. 像普通函式那樣執行,形成私有作用域,進行形參賦值,變數提公升等一系列操作

2. 預設建立乙個物件,

3. 讓這個物件成為當前類的例項,__proto__指向建構函式原型

4. 讓函式中的this指向這個物件

5. **執行

6. 預設把建立的物件返回

function _new(constructor,..args) ;

//obj.__proto__ = constructor.prototype;

let obj = object.create(constructor.prototype); //和上面2行等效

constructor.call(obj,...args);

return obj;

}

let t = _new(sayhello,'mike')

console.log(t.__proto__===sayhello.prototype)

console.log(t.message)

mike say hello, undefined

true

***

模擬實現js的new

目錄new是什麼 一句話介紹new new運算子建立乙個使用者自定義的物件型別的例項,或者具有建構函式的內建物件型別之一。看下下面的 來了解new操作符都做了什麼事情 class constructor function person name,age 每個函式都有prototype物件屬性 在類的...

js中new的原理與實現

這裡使用es6的結構來獲取建構函式所需的引數 也可以使用arguments來獲取,不過es6中不這麼建議了,要用的話進行arguments 0 的提取與裁剪就可以了 function new fn,args 構造空物件 fn.obj,args 建構函式賦值與this指向的修改 obj.proto f...

js 實現new操作符

new操作符做了什麼 建立乙個空的物件,即 空物件的原型指向建構函式的原型,即設定該物件的建構函式 讓this指向新建立的空物件,即新建立的物件作為this的上下文 判斷返回值的型別,如果是值型別就是返回新的建立物件,如果是引用型別就返回引用型別的物件。如果沒有返回物件型別object包括funct...