前端開發面試總結(七)

深度解析new原理以及模擬實現

經過關鍵字new關鍵字建立的實例有如下的兩個特色:javascript

  • 一、實例能夠訪問到構造函數裏面的屬性
  • 二、實例能夠訪問到原型裏面的屬性

模擬實現new的代碼:java

function create(){
    //建立一個空對象
    var obj = new Object();
    //得到構造函數,arguments去除第一個參數
    var Con = [].shift.call(arguments);
    //連接到原型,obj能夠訪問到構造函數原型的屬性
    obj.__proto__ = Con.prototype;
    var ret = Con.apply(obj, arguments);
    //優先返回構造函數返回的對象
    return ret instanceof Object ? ret : obj;
}
複製代碼

詳細解釋賦值,淺拷貝和深拷貝的區別

1、賦值數組

  • 基本類型賦值:賦的是值,賦值先後兩個變量互相之間不影響。
  • 引用類型賦值:賦的是引用的地址,引用賦值以後這兩個變量有相同的引用,指向同一個對象,相互之間會有影響。

2、淺拷貝 淺拷貝就是對於引用的引用類型的值拷貝的只是引用的地址,當引用的內容發生改變的時候,兩個變量的內容都會受到影響。淺拷貝程序示例:app

var a = {
    name: "zhangsan"
};

var b = a;

console.log("修改以前:");
console.log(a); //zhangsan
console.log(b); //zhangsan

a.name = "lisi";

console.log("修改以後:");
console.log(a); //lisi
console.log(b); //lisi
複製代碼

淺拷貝的使用場景函數

  • Object.assign():能夠將一個或者多個對象的全部可枚舉的屬性全都複製到另外一個對象。
  • 展開語法{...}
  • Array.prototype.slice():該方法返回的是一個新的數組對象,這個方法執行的是原數組的淺拷貝,原始數組是不會被改變的。

3、深拷貝ui

執行深拷貝的時候,會拷貝全部的屬性,而不是隻拷貝地址。深拷貝完成以後,兩個值之間就不會相互影響了。spa

深拷貝的使用場景prototype

JSON.parse(JSON.stringift(object)):用於對JSON對象和JSON字符串之間的轉換,在這個過程當中是深拷貝,對象的每個可枚舉的屬性都會被複制。code

總結對象

和原數據是否指向同一對象 第一層數據爲基本數據類型 原數據中包含子對象
賦值 改變會使原數據一同改變 改變會使原數據一同改變
淺拷貝 改變會使原數據一同改變 改變會使原數據一同改變
深拷貝 改變會使原數據一同改變 改變會使原數據一同改變
相關文章
相關標籤/搜索