2016-03-30 15 views
0

İki Javascript nesnesini bir dosyada bulunan ve diğeri kullanıcı tercihlerine sahip basit bir nesne olan iki JavaScript nesnesini genişletiyorum.JavaScript'te çocuk nesnelerine erişme

// local prefs 
var prefs = { name: "Bob Barker", show: "Price is Right" }; 

// ajax in default prefs with dataType: "script" 
var defaultPrefs = { 
     studio: { name: "CBS", location: "Hollywood, CA" }, 
     producers: [ { name: "Producer1" }, { name: "Producer2" } ] 
} 

// merge prefs 
var mergedPrefs = $.extend(prefs, defaultPrefs); 

problem, birleştirilmiş dosyada nesneleri oldukları gibi prefs.producers veya prefs.studio kullanarak üreticileri veya stüdyo erişemez olduğunu. Bunu nasıl aşabilirim?

+1

Eğer * istediğiniz söylüyorsunuz * erişmeyi mümkün 'prefs.producers' kullanarak veya' prefs.producers' kullanarak bunları kullanmak istemez *? –

cevap

2

bu deneyin:

var mergedPrefs = $.extend({}, prefs, defaultPrefs); 

orijinal nesne (ler) yeni bir kopyasını yaratacak boş bir nesne genişletme. Ayrıca aynı görev için Object.assign kullanabilirsiniz

Ancak jQuery.extend da Object.assign hep (daha iyi performans için) yassı iken yinelemeli birleştirmek için bir derin seçeneği sahiptir.

+1

@MoreScratch Bu cevap istediğiniz gibi görünüyor, ancak bunun için jQuery kullanmanıza gerek olmadığını da unutmayın. İşlevsel olarak $ .extend'e eşdeğer olan ES6 'Object.assign' işlevini de kullanabilirsiniz. – user162097

+0

Dokümanlardan alınan: Ancak, her iki orijinal nesneyi de korumak istiyorsanız, bunu boş bir nesneyi hedef olarak geçirerek yapabilirsiniz: var object = $ .extend ({}, object1, object2); https://api.jquery.com/jquery.extend/ –

2

Bu kodu deneyin, ancak JQuery'yi kullanmamak için ES6'da Object.assign ürününü öneririm. aynı mıdır: ($.extend kullanarak) kod Object.assign olmadan çalışma ile

var mergedPrefs = Object.assign({}, prefs, defaultPrefs); 

Parçacığı:

// local prefs 
 
var prefs = { 
 
    name: "Bob Barker", 
 
    show: "Price is Right" 
 
}; 
 

 
// ajax in default prefs with dataType: "script" 
 
var defaultPrefs = { 
 
    studio: { 
 
    name: "CBS", 
 
    location: "Hollywood, CA" 
 
    }, 
 
    producers: [{ 
 
    name: "Producer1" 
 
    }, { 
 
    name: "Producer2" 
 
    }] 
 
} 
 

 
// merge prefs 
 
var mergedPrefs = $.extend({}, prefs, defaultPrefs);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

+1

ECMA Komut Dosyası 6ncı sürüm olarak, ES6'yı desteklemeyen tarayıcılar için bir polypill sağlayabilir. Https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Object/assign adresine bakın. – roland

İlgili konular