2012-09-07 128 views
2

我有一個方法嚴重的問題。因此,這是我的方法:日誌:未捕獲RangeError:超過最大調用堆棧大小

Object.prototype.clonage = function() { 
    var newObj = (this instanceof Array) ? [] : {}; 
    for (i in this) { 
    if (i == 'clone') continue; 
    if (this[i] && typeof this[i] == "object") { 
     newObj[i] = this[i].clonage(); 
    } else newObj[i] = this[i] 
    } return newObj; 
} 

,瀏覽器是給我:

Uncaught RangeError: Maximum call stack size exceeded

在生產線:

for (i in this) { 

有人可以有同樣的問題?

+0

您可能會無限地調用'.clonage'或者真的很頻繁。 – Halcyon

+0

玻璃料可能是正確的。你能給我們一些關於你如何稱呼它的背景嗎?我只是在一次克隆電話測試它,它工作正常。 – kleezy

+0

我正在使用它:window.tweetOrberByPassed = window.displayedTweetListing.clonage();他們都是對象。 我在另一個腳本頁面有相同的功能,我對它沒有任何問題。 – Simon

回答

1

我可以使JavaScript對象,可以打破你的克隆功能,如果這是任何一種成就:)。

檢查:http://jsfiddle.net/Bd6XL/2/

var x = { 
    a: 5, 
    b: "asdf" 
}; 
var y = { 
    a: 5, 
    b: "asdf" 
}; 

x.y = y; 
y.x = x; 

克隆任何人。是的,它不會因爲循環引用而工作。嘗試調試你的對象,看看是否有任何循環引用。

也嘗試限制你的克隆到你真正需要的東西。

編輯:

退房有關克隆了這個問題:What is the most efficient way to deep clone an object in JavaScript?

有相當多的答案。如果您使用jQuery,請嘗試使用以下代碼:

// Shallow copy 
var newObject = jQuery.extend({}, oldObject); 

// Deep copy 
var newObject = jQuery.extend(true, {}, oldObject); 
+0

這有點奇怪。有沒有其他的方法來克隆一個對象?我在想我的方法可以做到:s – Simon

+0

這是javascript。你可以用愚蠢的方式克隆,我會編輯我的答案。 – SoonDead

+0

第二個救了我的命!再次感謝你! var newObject = jQuery.extend(true,{},oldObject); – Simon

相關問題