new操作符的實現原理就4條
新建乙個物件o,將o的__proto__
屬性指向建構函式的原型屬性prototype
繫結建構函式的執行上下文到o上,並執行建構函式得到返回值s
如果s是乙個物件,new 操作符返回的就是這個s物件
如果s不是乙個物件,new 操作符返回的就是o
下面我們來構造乙個new操作符,並演示一下new操作符
function mynew(func)
function person()
let o1 = new person;
let o2 = mynew(person);
console.log(o1);
console.log(o2);
//person
//person
o1.__proto__ === o2.__proto__;//true
o2.__proto__ === person.prototype;//true
可以看到o1和o2的屬性是一樣的
下面我們再看看建構函式返回乙個物件是什麼情況
function person2()
} let o3 = new person2();
let o4 = mynew(person2);
console.log(o3);
console.log(o4);
////
o3.__proto__ === o4.__proto__;//true
o3.__proto__ === person2.prototype;//false
o3.__proto__ === object.prototype;//true
可以看到o3和o4都是建構函式返回的那個物件,與我們前面的描述是一致的。 new操作符實現原理
new操作符實現原理 function news func 生成新物件 target.proto func.prototype 例項的 proto 指向原型,建構函式的prototype也指向原型 鏈結到原型 var res func.call target 把函式的this繫結在了新生成的物件中 ...
實現new操作符
new操作符返回乙個物件,所以需要在函式內部返回乙個物件。這個物件,也就是建構函式中的this,可以訪問到掛載在this上的任意屬性。這個物件可以訪問到建構函式原型上的屬性,所以需要將物件與建構函式鏈結起來。只有返回值是物件,才進行正常處理。const create constructor,args...
js 實現new操作符
new操作符做了什麼 建立乙個空的物件,即 空物件的原型指向建構函式的原型,即設定該物件的建構函式 讓this指向新建立的空物件,即新建立的物件作為this的上下文 判斷返回值的型別,如果是值型別就是返回新的建立物件,如果是引用型別就返回引用型別的物件。如果沒有返回物件型別object包括funct...