new操作符實現原理

2022-08-24 11:12:16 字數 1128 閱讀 3378

new操作符實現原理:  

function news(func) ;//生成新物件

target.__proto__ = func.prototype;//例項的__proto__指向原型,建構函式的prototype也指向原型(鏈結到原型)

var res = func.call(target);//把函式的this繫結在了新生成的物件中

if (typeof (res) == "object" || typeof (res) == "function")

return target;//如果如果傳入的函式(建構函式)沒有自己的返回值,則返回新物件

}

如果暫時看不明白,請往下看:

1.明白new的原理首先我們需要明白原型,建構函式,例項的關係

寫明是栗子,以函式father為例,函式father就是乙個建構函式,我們可以通過它構建乙個例項

function father() 

const instance = new father();

此時,instance為例項,建構函式為father,建構函式擁有乙個prototype的屬性指向原型。

因此原型為:

const prototype = father.prototype;

因此看得出三者的關係:

例項.__proto__===原型

原型.constructor === 建構函式

建構函式.prototype === 原型

例項.constructor === 建構函式

例子:

function instancefun()

const instance = new father();

console.log(instancefun.prototype.constructor,'建構函式');

console.log(instance.__proto__,'例項訪問原型');

console.log(instancefun.prototype,'建構函式訪問原型');

console.log(instance.constructor,'例項的建構函式');

2.new運算子的執行過程

new操作符的實現原理

new操作符的實現原理就4條 新建乙個物件o,將o的 proto 屬性指向建構函式的原型屬性prototype繫結建構函式的執行上下文到o上,並執行建構函式得到返回值s 如果s是乙個物件,new 操作符返回的就是這個s物件 如果s不是乙個物件,new 操作符返回的就是o 下面我們來構造乙個new操作...

實現new操作符

new操作符返回乙個物件,所以需要在函式內部返回乙個物件。這個物件,也就是建構函式中的this,可以訪問到掛載在this上的任意屬性。這個物件可以訪問到建構函式原型上的屬性,所以需要將物件與建構函式鏈結起來。只有返回值是物件,才進行正常處理。const create constructor,args...

js 實現new操作符

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