js 深淺拷貝 call apply bind

2022-05-19 15:21:04 字數 1965 閱讀 6247

一、傳值與傳址

基本型別的值存在棧記憶體中

引用型別的位址存在棧記憶體中,位址指向堆記憶體中儲存的值

淺拷貝和深拷貝是針對引用型別的資料來說的。

二、淺拷貝

把乙個物件中的所有的內容,複製乙份給另乙個物件,直接複製,或者說,就是把乙個物件的位址給了另乙個物件,他們指向相同,兩個物件之間有共同的屬性或者方法,都可以使用。

//

淺拷貝(陣列)

function arrextend(arr)

function objextend(obj), obj)

}//淺拷貝(物件)

function type(obj)

//淺拷貝(物件和陣列 -- 不拷貝原型)

function easyextend(obj)

else

if(type(obj) === "

array")

for(let key in

obj)

}return

result

}

三、深拷貝

把乙個物件中所有的屬性或者方法,乙個乙個的找到.並且在另乙個物件中開闢相應的空間,乙個乙個的儲存到另乙個物件中。

//

深拷貝(不拷貝原型)

function type(obj)

function deepextend(obj)

else

if(type(obj) === "

array")

for(let key in

obj)

else

}else}}

return

result

}//深拷貝

json.stringify()

json.parse()

//通過 json.parse(json.stringify(obj)) 可產生乙個新物件

call的使用語法

函式名字.call(物件,引數1,引數2,...)

方法名字.call(物件,引數1,引數2,...)

bind的使用語法

函式名字.bind(物件,引數1,引數2,...);---->返回值是複製之後的這個函式

方法名字.bind(物件,引數1,引數2,...);---->返回值是複製之後的這個方法

function person(age) 

person.prototype.sayhi =function (x, y) ;

function student(age)

var per = new person(10);//

例項物件

var stu = new student(100);//

例項物件

//sayhi方法是per例項物件的

]);per.sayhi.call(stu,

10, 20);

bind

function person(age) 

person.prototype.play=function () ;

function student(age)

var per=new person(10

);var stu=new student(20

);//

複製了乙份

var ff=per.play.bind(stu);

ff();

function showrandom()

//新增原型方法

showrandom.prototype.show1=function () ;

showrandom.prototype.show2=function () ;

//例項物件

var sr=new

showrandom();

sr.show1();

JS深 淺拷貝

在js中,資料型別分為基本資料型別和引用資料型別兩種。對於基本資料型別來說,它的值直接儲存在棧記憶體中,而對於引用型別來說,它在棧記憶體中只是儲存了乙個指向對記憶體的引用,而真正的資料儲存在堆記憶體中。object array 這兩個就是引用型別,當我門直接去拷貝的話 copyobj obj 拷貝的...

js 深淺拷貝

深拷貝就是複製內部內容 淺拷貝就是複製記憶體位址 var obj 淺拷貝 引用傳遞 淺拷貝就是賦值,將鑰匙複製乙份 var o obj 深拷貝 內部內容複製乙份 將房子複製乙份 方法一 var str json stringify obj var obj3 json parse str 方法二 va...

js深淺拷貝

1.什麼是深淺拷貝 簡單的來說,加入b複製a a改變 如果b也跟著改變的話,那就是淺拷貝,反之是深拷貝 實現淺拷貝方法 1.賦值操作 var a 0 1,2 3,4 var b a a 0 5console log a 5,1,2,3,4 console log b 5,1,2,3,4 2.es6 ...