很久之前模仿大佬的文章寫的筆記,現在拿出來整理複習一下
大概思路
// 手寫一個new實現
function create() {
//創建一個空的對象
var obj = new Object(),
//獲得構造函數,arguments中去除第一個參數
Con = [].shift.call(arguments)
//鏈接到原型,obj可以訪問到構造函數原型中的屬性
obj._proto_ = Con.prototype
//綁定this實現繼承,obj可以訪問到構造函數中的屬性
var ret = Con.apply(obj, arguments)
//優先返回構造函數返回的對象
return ret instanceof Object ? ret : obj
}
// 使用這個手寫的new
function Person() {... }
//使用內置函數new
var person = new Person()
//使用手寫的new,即create
var person = creaate(Person, ...)