可以使用Object.assign()函數(shù)來(lái)克隆一個(gè)object對(duì)象,使用方式如下:
創(chuàng)新互聯(lián)公司是一家專業(yè)提供定南企業(yè)網(wǎng)站建設(shè),專注與成都網(wǎng)站制作、成都做網(wǎng)站、html5、小程序制作等業(yè)務(wù)。10年已為定南眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站制作公司優(yōu)惠進(jìn)行中。
var obj = {a:1, b:2};
var obj1 = Object.assign({}, obj);
//看看是不是克隆成功了
obj1.a = 2;
console.log(obj1.a);//2
console.log(obj.a);//1
發(fā)現(xiàn),改變obj1中屬性的值沒(méi)有影響obj的屬性,大功告成。
淺克隆就是將棧內(nèi)存中的引用復(fù)制一份,賦給一個(gè)新的變量,本質(zhì)上兩個(gè)指向堆內(nèi)存中的同一地址,內(nèi)容也相同,其中一個(gè)變化另一個(gè)內(nèi)容也會(huì)變化。
深克隆就是創(chuàng)建一個(gè)新的空對(duì)象,開辟一塊內(nèi)存,然后將原對(duì)象中的數(shù)據(jù)全部復(fù)制過(guò)去,完全切斷兩個(gè)對(duì)象間的聯(lián)系。
[img]這題的意思是把一個(gè)對(duì)象中的內(nèi)容一級(jí)一級(jí)的復(fù)制到另外一個(gè)對(duì)象中。用for(var i in obj)的方式就可以了。
至于類型,js雖然是弱類型,但其實(shí)是有類型的,如數(shù)字類型,就是Number,對(duì)象類型就是Object,String,Date,Array,Boolean,Function等,然要判斷對(duì)象的類型也很簡(jiǎn)單,如:
var?a?=?2;
a.constructor?==?Number;//?判斷是否為數(shù)值
a.constructor?==?String;//?判斷是否為字符串?a?=?"test"
a.constructor?==?Date;//?判斷是否為日期?a?=?new?Date()
a.constructor?==?Array;//?判斷是否為數(shù)組?a?=?[1,"2",true]
a.constructor?==?Boolean;//?判斷是否為布爾型?a?=?true
a.constructor?==?Object;//?判斷是否為對(duì)象?a?=?{}
a.constructor?==?Function;//?判斷是否為方法類型?a?=?function(){}
模似繼承的方法:對(duì)象冒充、apply方法、call方法,原型方式、混合方式。
第一種嚴(yán)格來(lái)說(shuō)不叫克隆。a和b指向同一個(gè)對(duì)象,修改b的時(shí)候其實(shí)a也被修改了
第二種是把a(bǔ)做了一個(gè)復(fù)制,然后把復(fù)制出來(lái)的新對(duì)象給b,修改b的時(shí)候a不會(huì)變