Javascript uygulaması için Kullanıcının bir nesnenin durumunu kaydetmesine izin verebilmem gerekir. Bu, daha önce dinamik olarak veya bir GUI aracılığıyla oluşturulan ve daha sonra kaydedilmiş işlevleri yükleyen bir dizi özel işlev kaydetmeyi içerir. Esas olarak işlevleri serileştirip dizisi kaldırmam gerekiyor.Javascript'in Ters Çalışması Function.toString()
Şu anda Fonksiyon nesnenin .ToString() yöntemini kullanarak serialize kısmını başarmak:
func.toString().replace('"', '\"').replace(/(\r)/g, ' ').replace(/(\n)/g, ' ').replace(/(\t)/g, ' ')
Bu bana verir bu güzellik gibi "tefrika" fonksiyonları (fonksiyon isimsiz olduğuna dikkat edin):
"function (someParameter) {this.someFunctionName(return 'something';}"
Bu işlemin üstesinden gelmek, mücadele ettiğim yerdir. Bunun üzerine eval()
çağırmadan önce t =
ile seri işlevini prepend nasıl
var func = eval('t =' + so.actions[i].func);
Not: fonksiyonlarını unserializing Benim şimdiki en iyi çözüm budur. Bunu yapmayı sevmiyorum çünkü küresel bir değişken yaratıyor ama etrafında bir yol bulamıyorum. fonksiyonunu ancak undefined
dönmez var t =
, eval() prepending zaman
alternatif yollar için "unserialize" isimsiz fonksiyon var mıdır
. Bu prepending değil, ben bir "Beklenmeyen belirteç (SyntaxError" alırlar.?PS: Kullanıcı girdisi üzerinde eval() kullanmanın güvenlik etkilerinin farkındayım: Öngörülebilir bir gelecekte bu yazılımın tek kullanıcısıyım, bu nedenle şu anda bir sorun değil:
kapatma halledilir. Bu işlevler sadece 'Function.call (theContextTheFunctionIsExecutedIn)' kullanılarak gerçekleştirilir. Serileştirilmiş işlevi parantez çalışmaları ile çevrelemenizin öneri - bu nedenini biliyor musunuz? – jonemo
[MDN] 'ye göre (https://developer.mozilla.org/en/JavaScript/Reference/Functions_and_function_scope), parantezlerin eklenmesi onu bir * declaration * işlevinden * function * ifadesine * değiştirir. (Parens içinde bir ifadenin bir parçası.) Bir ifade olduğu için, “func” a atayabileceğiniz bir değer döndürecektir. Bu ayrıca, değerlendirmenin şu anda içinde olduğu kapsama da bağlı olabilir. –
Ayrıca bkz. Http://kangax.github.com/nfe/ – user123444555621