0
我們有一個具有私有數組的類。分配給變量分片數組允許修改原始數組
class BookService{
private booksList: Book[];
constructor(){
this.booksList = [
new Book('Tales', true),
new Book('Novels', false),
new Book('Dictionary', false)
];
}
getBooks(){
return this.booksList;
}
}
class Book{
constructor (public name: string, public isRead: boolean){}
}
export const bookService = new BookService();
另外我們有一個實現。
import {bookService} from './book-service';
//get copy of original array which is not by reference
let books: any = bookService.getBooks().slice(0);
//log local array
console.log(books);
// modify local array
books[1].isRead = true;
//log original array
console.log(bookService.getBooks());
我們得到了原始數組的副本。然後我們修改了本地數組(原始數組的副本)。我們得到了修改過的原點數組。
我不明白爲什麼起源專用數組已被修改?
如果我修改getBooks到
getBooks(){
return this.booksList.slice(0);
}
它不會幫助。
如果我修改使用lodash方法_.cloneDeep Method description
getBooks(){
return _.cloneDeep(this.booksList);
}
原始數組將不會被修改getBooks。 爲什麼?如何避免與這種情況有關的錯誤?
可能重複[如何正確克隆JavaScript對象?](https://stackoverflow.com/questions/728360/how-do-i-correctly-clone-a-javascript-object) – kGielo
複製數組不包含其中包含的對象的副本。 – deceze
你在做什麼叫做_shallow copy_。 – undefined