var a = {
f1: function() {
// Do Something
},
f2: ['a','b','c'],
f3: 1234
}
我需要創造這樣的事情
var b = Object.create(a);
但是b實例化一個相同的JS對象沒有顯示我所包含的所有的一個!
var a = {
f1: function() {
// Do Something
},
f2: ['a','b','c'],
f3: 1234
}
我需要創造這樣的事情
var b = Object.create(a);
但是b實例化一個相同的JS對象沒有顯示我所包含的所有的一個!
您可以創建一個克隆功能,做這樣的事情:
var clone = function(obj) {
// Create a new object using the same prototype as the original object
var cloned = Object.create(obj);
// Copy each property from 'obj' to 'cloned'
for (p in obj) {
if (obj.hasOwnProperty(p)) {
cloned[p] = obj[p];
}
}
return cloned; // Return the cloned object
}
編輯:小心的第一條語句創建一個從克隆對象原版的。
你必須注意到,如果你寫var cloned = {};
像我以前那樣,原型是不同的,因此該方案將不會在100%正常工作,因爲如果使用instanceof
運營商,它將返回false
。
如果您僅使用var cloned = Object.create(obj);
作爲其他答案描述的內容,您只需獲得一個克隆的對象,其原型與原型的原型相似。但是您還需要複製原始對象的屬性並將它們附加到克隆的版本。這就是我們必須使用for循環的原因。
最後,如果使用的Object.create第二前次做法並不在瀏覽器中工作,因爲它有一個傳統的JavaScript引擎,那麼你必須使用一個小的解決方法如下所示。
function F() {};
F.prototype = obj.prototype;
var cloned = new F();
希望它有幫助! :)
使用prototype
:
var b = Object.create(a.prototype);
Object.create
創建具有指定原型對象和屬性的新對象。
,預計原型爲新創建的對象:Object.create(proto [, propertiesObject ])
https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object/create
'a'沒有「原型」屬性! – Bergi 2013-02-21 13:14:29
@Darren Davies @Bergi也許你可以使用'a .__ proto__',但我認爲這是一個非標準的屬性。甚至,我試着在我的控制檯上,但它不適合我:( – albertoblaz 2013-02-21 21:27:54
@albertoblaz:不,絕對不是。'Object.create(a .__ proto __)'將等於'var b = {};'。 – Bergi 2013-02-21 21:33:26
另一種方式來做到這一點,使用jQuery是功能Jquery.extend。您可以使用它像這樣:
var b = jQuery.extend({},a);
您可以插入多個對象並通過其屬性的聯合來創建複合複雜對象 – 2013-02-21 11:54:24
'b'''''''因爲它是原型,所以只要你不覆蓋'b'上的同一個屬性,它們將在訪問時在'a'上查找。 – Yoshi 2013-02-21 11:51:44
[在Javascript中複製對象]的完全重複(http://stackoverflow.com/questions/728360/copying-an-object-in-javascript) – Bergi 2013-02-21 11:57:26
對不起,因爲我寫了我的答案,但我有一個小錯誤。檢查一下,因爲現在我已經修復了它,並且寫了一個更好的描述。請注意,這只是JavaScript代碼,這是學習語言高級方面的最佳方式,但是您可以使用jQuery的擴展方法嗎? :) – albertoblaz 2013-02-21 21:51:55