new的原理及實現

2022-09-02 19:09:09 字數 1670 閱讀 5548

// new運算的過程

/** * 1、建立乙個空物件;

* 3、繫結 this:將物件作為建構函式的 this 傳進去,並執行該建構函式;

* 4、返回新物件:如果建構函式返回的是乙個物件,則返回該物件;否則(若沒有返回值或者返回基本型別),返回第一步中新建立的物件;

*/var person = function(name)

person.prototype.getname = function()

var objectfactory = function() `)

// 2、該空物件的原型指向建構函式: 將建構函式的prototype 賦值給空物件的 __proto__屬性;

obj.__proto__ = constructor.prototype

// 3、將空物件作為建構函式的this傳進去,並執行該建構函式

// 4、返回新物件:如果建構函式返回的是乙個物件,則返回該物件;否則(若沒有返回值或者返回基本型別),返回第一步中新建立的物件;

return typeof ret == 'object' ? ret : obj

}var a = objectfactory(person, 'wyh')

console.log('執行後的name = ', a.name)

new實現的第四步解釋:

建構函式返回值有如下三種情況:

情況1:返回乙個物件

function car(color, name) 

}var car = new car("black", "bmw");

car.color;

// undefined

car.name;

// "bmw"

例項car中只能訪問到返回物件中的屬性

情況2:沒有return,即返回undefined

function car(color, name) 

var car = new car("black", "bmw");

car.color;

// black

car.name;

// undefined

例項car中只能訪問到建構函式中的屬性,和情況1完全相反。

情況3:返回undefined以外的基本型別

function car(color, name) 

var car = new car("black", "bmw");

car.color;

// black

car.name;

// undefined

例項car中只能訪問到建構函式中的屬性,和情況1完全相反,結果相當於沒有返回值。

所以需要判斷下返回的值是不是乙個物件,如果是物件則返回這個物件,不然返回新建立的obj物件。

new 原理及模擬實現

new 運算子建立乙個使用者定義的物件型別的例項或具有建構函式的內建物件的例項。舉個栗子 function car color car.prototype.start function var car new car black car.color 訪問建構函式裡的屬性 black car.star...

new的實現原理

new的特點 new乙個建構函式,會自動return乙個例項物件 new完成的例項化物件,proto 自動指向建構函式的prototype new建構函式傳參自動賦值給當前例項化物件 防抖 在固定的時間內沒有觸發事件,會在固定時間結束後觸發,如果固定時間內觸發事件了,會在延長固定時間內觸發 節流 無...

JS中new的實現原理及重寫

提到new,肯定會和類和例項聯絡起來,如 function func let f new func 上面的 我們首先建立了乙個函式,如果是用物件導向的說法就是建立了乙個function類的例項,如果直接執行這個函式,那它就是乙個普通的函式,如果用new執行,則這個函式被稱為乙個自定義的類。如果是乙個...