我一直在研究我自己的javascript库kis-js。我最近将它转换为使用像jQuery这样的dom选择器,但由于javascript只复制引用,我有这个问题:
如果您拨打$_
两次,则第二次拨打电话会更改第一次通话的结果。
测试代码:
<h1>Heading</h1>
<a>Anchor</a>
<script>
var anchor = $_("a");
var heading = $_("h1");
console.log(anchor.el); // should be <a>, but it's <h1>
</script>
以下是图书馆的来源:https://github.com/timw4mail/kis-js/blob/master/kis.js
我在想我需要创建一个构造函数对象的深层副本,但我不太清楚如何去做。
编辑:
我创建了一个深层复制功能:
dcopy = function(obj)
{
var type, f;
if(obj == null)
{
return;
}
if(typeof Object.create !== "undefined")
{
return Object.create(obj);
}
var type = typeof obj;
if(type !== "object" && type !== "function")
{
return;
}
var f = function(){};
f.prototype = obj;
return new f();
};
如何使用它以便我可以扩展构造的对象?
答案 0 :(得分:2)
你应该返回一些new
...另外,避免分配和返回全局变量。
答案 1 :(得分:0)
所以,我刚刚使用了这个功能。
dcopy = function(obj) {
var type, f;
if(obj == null)
{
return;
}
if(typeof Object.create !== "undefined")
{
return Object.create(obj);
}
var type = typeof obj;
if(type !== "object" && type !== "function")
{
return;
}
var f = function(){};
f.prototype = obj;
return new f();
};