一、傳值與傳址
基本型別的值存在棧記憶體中
引用型別的位址存在棧記憶體中,位址指向堆記憶體中儲存的值
淺拷貝和深拷貝是針對引用型別的資料來說的。
二、淺拷貝
把乙個物件中的所有的內容,複製乙份給另乙個物件,直接複製,或者說,就是把乙個物件的位址給了另乙個物件,他們指向相同,兩個物件之間有共同的屬性或者方法,都可以使用。
//淺拷貝(陣列)
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 ...