//實(shí)例對(duì)象繼承
//對(duì)象繼承
var Chinese = {
nation: '中國(guó)人'
};
function object(obj) {
function F() {}
F.prototype = obj;
return new F();
}
var Doctor = object(Chinese);
Doctor.carree = '醫(yī)生'; //增加私有屬性
console.log(Doctor);
console.log(Doctor.nation); // '中國(guó)人'
console.log(Doctor.carree); // '醫(yī)生'
Doctor.__proto__ === Chinese; // true Doctor的原型正是指向了Chinese對(duì)象
對(duì)象的淺拷貝(引用數(shù)據(jù)類型存的地址一樣,執(zhí)行同一個(gè)內(nèi)存地址)
function extendCopy(obj) {
var o = {};
if (typeof obj === 'object') {
for (var key in obj) {
o[key] = obj[key];
}
}
return o;
}
var obj1 = {
name: 'clh',
age: 23,
like: ['js','css']
};
var obj2 = extendCopy(obj1);
console.log(obj1); // name: 'clh', age:23 like: ['js', 'css']
console.log(obj2); // name: 'clh', age:23 like: ['js', 'css']
obj2.like.push('常連海');
console.log(obj1.like); // name: 'clh', age:23 like: ['js', 'css','常連海']
console.log(obj1.like === obj2.like); //true 他們倆個(gè)指向的內(nèi)存地址一樣,一個(gè)改變,另一個(gè)也會(huì)發(fā)生相應(yīng)的改變
特點(diǎn):
直接進(jìn)行拷貝,對(duì)于基本數(shù)據(jù)類型可以,但是對(duì)于引用數(shù)據(jù)類型(object,function),只是把地址給引用過去了,當(dāng)改變一個(gè)會(huì),另一個(gè)隨之改變,不好,所以之后出來了深拷貝
對(duì) 象的深拷貝(引用數(shù)據(jù)類型存的地址不一樣,互不影響)
function deelCopy(p, c) { //p-->>要拷貝的對(duì)象, c-->>類型, 是數(shù)組,還是對(duì)象,數(shù)組的話開始傳入[], 對(duì)象的話傳入{}
c = c || {};
if (typeof p === 'object') {
for (var key in p) {
if (typeof p[key] === 'object') {
c[key] = p[key].constructor === Array ? []: {};
deelCopy(p[key], c[key]);
} else {
c[key] = p[key];
}
}
}
return c;
}
var ary1 = [
{name: 'clh', age: 23},
{name: 'wd', age: 25}
];
var obj1 = {
name: 'clh',
age: 23,
like: [1, 2, 3, 4, 5, 6]
};
var ary2 = deelCopy(ary1, []);
cosole.log(ary2);
ary2[0] === ary1[0]; // false 內(nèi)存地址不一樣
ary2.push({name: '王東' ,age: 34});
console.log(ary1);
var obj2 = deelCopy(obj1, {});
console.log(obj2);
console.log(obj1.like === obj2.like); //false 內(nèi)存地址不一樣
obj2.like = 'book_js';
console.log(obj1); //里面的like沒有發(fā)生改變
在我們做項(xiàng)目的時(shí)候,經(jīng)常會(huì)存儲(chǔ)數(shù)據(jù),這時(shí)候就用到了對(duì)象的深拷貝