經過關鍵字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()
:能夠將一個或者多個對象的全部可枚舉的屬性全都複製到另外一個對象。3、深拷貝ui
執行深拷貝的時候,會拷貝全部的屬性,而不是隻拷貝地址。深拷貝完成以後,兩個值之間就不會相互影響了。spa
深拷貝的使用場景prototype
JSON.parse(JSON.stringift(object))
:用於對JSON對象和JSON字符串之間的轉換,在這個過程當中是深拷貝,對象的每個可枚舉的屬性都會被複制。code
總結對象
和原數據是否指向同一對象 | 第一層數據爲基本數據類型 | 原數據中包含子對象 | |
---|---|---|---|
賦值 | 是 | 改變會使原數據一同改變 | 改變會使原數據一同改變 |
淺拷貝 | 否 | 改變不會使原數據一同改變 | 改變會使原數據一同改變 |
深拷貝 | 否 | 改變不會使原數據一同改變 | 改變不會使原數據一同改變 |