js非構(gòu)造函數(shù)繼承

//實(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ì)象的深拷貝

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • *面試心聲:其實(shí)這些題本人都沒怎么背,但是在上海 兩周半 面了大約10家 收到差不多3個(gè)offer,總結(jié)起來就是把...
    Dove_iOS閱讀 27,624評(píng)論 30 472
  • 為什么很多內(nèi)置類如UITableView的delegate屬性都是assign而不是retain? 所有的引用計(jì)數(shù)...
    煙雨平生花飛舞閱讀 1,281評(píng)論 0 3
  • Java8張圖 11、字符串不變性 12、equals()方法、hashCode()方法的區(qū)別 13、...
    Miley_MOJIE閱讀 3,899評(píng)論 0 11
  • 什么時(shí)候拋出異常(throw) 1、驗(yàn)證-拋出:當(dāng)程序檢測(cè)到非預(yù)期狀態(tài)、當(dāng)前處理層無法處理的,應(yīng)創(chuàng)建一個(gè)新的異常對(duì)...
    九都散人閱讀 3,600評(píng)論 0 3
  • 類方法關(guān)鍵字static ClassName.self didSet 顧名思義, set方法調(diào)用之后調(diào)用 重寫Mo...
    Stago閱讀 351評(píng)論 0 0

友情鏈接更多精彩內(nèi)容