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...