js 實現new操作符

2022-07-24 18:39:10 字數 634 閱讀 7168

new操作符做了什麼

建立乙個空的物件,即{}

空物件的原型指向建構函式的原型,即設定該物件的建構函式

讓this指向新建立的空物件,即新建立的物件作為this的上下文

判斷返回值的型別,如果是值型別就是返回新的建立物件,如果是引用型別就返回引用型別的物件。(如果沒有返回物件型別object包括functoin, array, date, regexg, error),那麼new表示式中的函式呼叫將返回該物件的引用)

function copynew(obj,...args);

newobj.__proto__=obj.prototype;

// => object.setptototypeof(newobj, obj.prototype)

// 上面的兩步可以合為一步 let newobj=object.create(obj.prototype)

return typeof result ==='object' ? result : newobj;

// =>return result instanceof object ? result : newobj

}

如果要new的函式返回的是乙個物件,則new出來的也是這個執行後返回的物件,否則返回建立的新的物件

實現new操作符

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

new操作符實現原理

new操作符實現原理 function news func 生成新物件 target.proto func.prototype 例項的 proto 指向原型,建構函式的prototype也指向原型 鏈結到原型 var res func.call target 把函式的this繫結在了新生成的物件中 ...

JS中的new操作符

在js中定義乙個建構函式,然後用new操作符構造物件obj,js 如下。function base var obj new base console.log obj.name console.log obj.age new操作符具體都幹了什麼呢?其實很簡單,包括三步 1.var obj 2.obj....