sipariş JavaScript nesne özellikleri önce ES2015 için tanımlı bir sipariş çünkü, mevcut nakavt (bu yazının 3.4.0) 'de tanımlanmamış ve hatta ES2015 olarak, for-in
ve Object.keys
herhangi bir sipariş bilgisi olan. Hatta (
function objectForEach(obj, action) {
for (var prop in obj) {
if (obj.hasOwnProperty(prop)) {
action(prop, obj[prop]);
}
}
}
Yani, genişleticiler çalışacağı hiçbir tanımlanmış düzen vardır:
function applyExtenders(requestedExtenders) {
var target = this;
if (requestedExtenders) {
ko.utils.objectForEach(requestedExtenders, function(key, value) {
var extenderHandler = ko.extenders[key];
if (typeof extenderHandler == 'function') {
target = extenderHandler(target, value) || target;
}
});
}
return target;
}
Onun objectForEach
fonksiyon for-in
kullanır:
akım Nakavt böyle bu genişleticiler yoluyla döngüler ES2015) mevcut Nakavt'ta. Teoride yılında
, Knockout gelecekteki bir sürümü yerine yeni Object.getOwnPropertyNames
kullanabilirsiniz:
function applyExtenders(requestedExtenders) {
var target = this;
if (requestedExtenders) {
Object.getOwnPropertyNames(requestedExtenders).forEach(function(key) {
var extenderHandler = ko.extenders[key];
if (typeof extenderHandler == 'function') {
target = extenderHandler(target, requestedExtenders[key]) || target;
}
});
}
return target;
}
getOwnPropertyNames
saygı spec §9.1.12 listelenen JavaScript özelliklerinin yeniden tanımlanmış emir. Örneğinizde, required
, daha sonra logChange
olur, çünkü nesne başlatıcıları sözcüksel sırayla özellikler oluştururlar ve "kendi" özelliklerinin sırasına göre, hepsi sayısal olmayan ve Symbol
s değil, oluşturma sırasıdır (ancak bkz. detaylar için spec).
Olası kopya: http://stackoverflow.com/questions/20831840/multiple-extenders-in-knockout-js-not-working, en azından cevabı burada da geçerlidir. – nemesv
Evet - kabul edilen cevap sorumu da yanıtlıyor: http://stackoverflow.com/a/20835989/665261 Teşekkürler! –
Aslında, bence bu farklı bir soru ve bu cevap farklı sorulara cevap veriyor. Bu sorunun çaresi, yukarıda yapmadığınız uzatıcıları zincirlemektir. –