2016-12-06 67 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