2011-07-12 103 views
0

我一直在研究自己的JavaScript庫kis-js。最近,我將它轉換與DOM選擇像jQuery的工作,但因爲JavaScript只複製引用我有這樣的問題:如何在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

['jQuery.extend'](http://api.jquery.com/jQuery.extend)可以淺/深層複製JavaScript對象。 –

+1

@Paolo Moretti庫的全部內容是不使用jQuery。 – timw4mail

+0

@ timw4mail它可以教你。 –

回答

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(); 

}; 
2

你應該返回一些東西new ...另外,避免分配和返回全局變量。

+0

好的,但在哪裏?選擇器功能?構造函數?都? – timw4mail

+0

'$ _(...)'應該返回。 –

+0

如果我不分配一個全局變量,我將無法使用該庫。這是唯一分配的全球變量。 – timw4mail

相關問題