試著實現JS原始碼(持更

2021-09-29 21:36:10 字數 1641 閱讀 2279

1. 實現 new

先看看平時我們是怎麼使用new的:

function

person

(name, age)

let person =

newperson

('zs',20

);

在以上**中,new實際做了以下幾件事:

建立乙個新物件

改變建構函式中的作用域指向:this指向新物件

將建構函式接收的引數,為物件中的屬性賦值

返回這個物件

分析完,我們就可以動手實現了:

function

mynew

(constructor)

}function

person

(name, age)

let person1 =

mynew

(person)

('ls',18

);let person2 =

mynew

(person)()

;

2. 實現淺拷貝
let obj =};

// 1. ...運算子

let newobj =

;// 2. object.assign

let newobj = object.

assign

(, obj)

;// 3. 自定義******copy函式

function

******copy

(obj)

;// let newobj = array.isarray(obj) ? : {};

// let newobj = obj.constructor.name === "array" ? : {};

for(

let i in obj)

return newobj;

}

3. 實現深拷貝
// 1. 自定義deepcopy函式

function

deepcopy

(obj)

;for

(let i in obj)

else}}

return newobj;

}// 2. json.stringify json.parse

let newobj =

json

.parse

(json

.stringify

(obj)

);

4. 實現 array.isarray
array.

myisarray

=function

(obj)

5. 實現 instanceof

利用while迴圈,向上查詢例項物件的原型鏈,判斷例項物件的原型物件是否等於傳入的建構函式的原型物件,直至例項物件的原型為null,返回false

function

myinstanceof

(obj, constructor)

}

試著看Spring原始碼(IOC)一

本文主要說ioc,下次說aop。beanfactory生產 bean 的工廠,它負責生產和管理各個 bean 例項。背下來肯定是不需要的,有幾個重點和大家說明下就好。請先不用花時間在其他的介面和類上,先理解我說的這幾點就可以了。refresh 更新 使用好多其他的方法 建立bean容器prepare...

js 陣列常用方法原始碼實現

手寫push原始碼實現 1.在陣列的末尾新增 2.可以一次新增多項不同型別的資料 3.返回陣列的長度 const array 1,2,3,4 console.log array.push 5,6,7 console.dir array array.prototype.mypush function ...

js方法原始碼

去除html標籤 function removehtmltag str ie8相容placeholder標籤 不能輸入以0開頭的正數且不能輸入0,否則返回空字串 input name helpclass.seq keyup function else ps 不能輸入以0開頭的正整數但是可以輸入0的正...