2016-12-06 46 views
0

我正在組件架構項目,我看到這段代碼。

clone : function() { 
    return $.extend(true, {}, this); 
} 

這甚至意味着什麼?使用$.extendthis轉換爲對象?

回答

2

看起來好像clone是一個簡單地創建原始對象的克隆的對象的方法。你可以說這是一種創建對象的真實副本的方法,而不僅僅是對它的引用。所以this指的是該方法所屬的對象。

var obj = { 
 
    one: 1, 
 
    two: 2, 
 
    three: 3, 
 
    clone: function() { 
 
    return $.extend(true, {}, this); 
 
    } 
 
}; 
 

 
var clone = obj.clone(); 
 

 
obj.one = "one"; 
 

 
console.log(obj); 
 
console.log(clone);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

+0

這是奇怪的,不存在的話在jQuery的一個clone()方法,爲什麼用$ .extend – Devalor

+1

據我瞭解jQuery的'jquery.clone()'是隻用克隆HTML元素(可選地包含數據和事件),而不是純javascript對象。您提供的代碼片段不會顯示clone()方法的屬性。 jQuery文檔:.clone()方法執行匹配元素集的深層副本,這意味着它會複製匹配的元素以及它們所有的後代元素和文本節點。 – Flyer53

+1

還有一些:原生JavaScript對象沒有克隆方法。當你在jQquery $函數中包裝一個普通對象並嘗試調用'.clone()'時,你會得到一個'TypeError:elem.cloneNode不是函數 '。所以'$ .extend()'是製作一個純javascript對象的真正副本的jQuery方式。 – Flyer53