複製物件
在js中物件名,同時也是一個指標,加入直接將一個物件的名字賦值給另外一個物件,兩個物件其實指向的是記憶體中的同一個物件,要想開闢新的記憶體來建立兩個屬性相同,但是地址不同的物件,需要自己構建函式。
var obj = {
x: 1
}
var obj1 = obj;
obj1.x = 2;
console.log(obj.x); // 2
obj1的改變也會影響obj的變化,原因就是他們兩個物件指向記憶體中的同一個物件,下面我們重寫一個方法,是兩個物件不在同一塊記憶體上。
var obj = {
x: 1
}
var obj1 = clone(obj);
obj1.x = 2;
console.log(obj.x); // 1
function clone (obj) {
var newObj = {};
for (var i in obj) {
if (obj.hasOwnProperty(i)) newObj[i] = obj[i];
}
return newObj;
}
所有語言中new的作用就是開闢記憶體,每new一次就會為物件新開闢一塊記憶體。
再看php中物件的複製:
class Animal{
public $name;
public $weight;
}
class Dog extends Animal {
function __construct($host,$name,$weight) {
$this->host = $host;
$this->name = $name;
$this->weight = $weight;
}
}
$dog = new Dog('wangwang','xixi',10);
$spot = $dog;
$spot->name = "xishao";
echo $dog->name; // xishao
$other = clone $dog;
$other->name = "shaohui";
echo $dog->name; // xishao
php中也是像js中的那樣,php中有一個clone
關鍵字,可以做到另外開闢記憶體來複制物件,並且在使用clone
關鍵字時會呼叫魔術方法__clone()
再看C#中
public class Dog
{
public int age;
public double weight;
public Dog(int age, double weight)
{
this.age = age;
this.weight = weight;
}
}
Dog spot = new Dog(20,10.2);
Dog other = spot;
other.age = 20;
Console.WriteLine(spot.age); // 20
與php和js一樣,c#也是這麼處理的,但是我們在c#要是使用了泛型,可以就不是這樣子了,c#中的泛型無論是引用型別還是基本型別都會將其看成基本型別來處理。
下面的一個例子是我在做資料結構作業時發現的:
我本以為temp的記憶體地址和取出來的Data的地址是一樣的,但是事實上並不是這樣的,temp與這個取出來的Data沒有任何的關係。
相關文章
- JS物件複製:深複製和淺複製JS物件
- vue複製物件Vue物件
- js物件深複製JS物件
- JavaScript物件複製理解JavaScript物件
- iOS之物件複製iOS物件
- js深度複製物件JS物件
- 對於複製普通物件 深複製和淺複製是否一樣物件
- js物件的複製方法JS物件
- SpringBoot物件複製Spring Boot物件
- JS物件深度克隆/複製JS物件
- C#中的物件深複製和淺複製C#物件
- 淺談JS中物件的淺複製和深複製JS物件
- Java中物件的深複製和淺複製詳解Java物件
- vue實現物件的複製Vue物件
- vue物件的深層複製Vue物件
- JS 複製陣列和物件JS陣列物件
- 複製物件重新賦值不改變原物件物件賦值
- 改變複製物件結構對高階複製的影響物件
- VUE js中複製物件 JSONVue物件JSON
- C# 高效能物件複製C#物件
- JS 物件如何實現深複製JS物件
- 談談Python中物件複製Python物件
- visio 物件複製到其他程式物件
- Java物件複製之MapStruct使用Java物件Struct
- [分享]javascript 陣列以及物件的深拷貝(複製陣列或複製物件)的方法JavaScript陣列物件
- CoffeeScript攻略2.1:克隆物件(深複製)物件
- 第十篇:複製物件時切記複製每一個成分物件
- 淺複製和深複製的概念與值複製和指標複製(引用複製)有關 淺複製 “指標複製 深複製 值複製指標
- Java物件複製原理剖析及最佳實踐Java物件
- es6完全深複製一個物件物件
- Java引用複製、淺複製、深複製Java
- 物件的生存期 記憶體 深度複製 複製建構函式 筆記物件記憶體函式筆記
- Java淺複製大揭秘:如何輕鬆複製兩個不同物件的某些相同屬性Java物件
- 【web前端】用javascript實現物件的深複製Web前端JavaScript物件
- 第十三章 物件的複製及儲存物件
- poi操作excel,複製sheet,複製行,複製單元格,複製styleExcel
- MySQL 8 複製(三)——延遲複製與部分複製MySql
- 前端 JavaScript 複製貼上的奧義——Clipboard 物件概述前端JavaScript物件