إزالة وإعادة ربط الخصائص المعينة للوظائف من كائنات جافا سكريبت

StackOverflow https://stackoverflow.com//questions/22064377

  •  23-12-2019
  •  | 
  •  

سؤال

لدي تطبيق موجود من جانب العميل يستخدم كائنات جافا سكريبت التي تبدو كما يلي:

var myObject = {
   Id: 1,
   Name: 'Foo',
   Property1: 123,
   Property2: 'ABC',
   MyMethod: function() { ///do something },
   MyMethod2: function() { /// do something else }
};

أتطلع الآن إلى محاولة استمرار هذه الكائنات باستخدام خدمة مثل Firebase.لا يحب Firebase الخصائص التي تحتوي على الوظائف، لذلك أريد معرفة ما إذا كانت هناك طريقة "بسيطة" لإزالة الوظائف المخالفة عند الحفظ في Firebase ثم إعادة ربطها عند الاسترداد دون الحاجة إلى إنشاء نسخ من كل من شاء.

هل كانت مفيدة؟

المحلول

النمط الشائع إلى حد ما هو أن يكون لديك وظيفة منشئة مع الوظائف ذات الصلة المرتبطة بها، وأن تجعل هذا المُنشئ يقبل نسخة أولية من الكائن الذي يستخدمه لملء نفسه بالإضافة إلى وظيفة "toRaw" أو وظيفة مماثلة تمنحك نسخة خام.

على سبيل المثال:

function Thingy(raw) {
    var name;
    for (name in raw) {
        if (raw.hasOwnProperty(name)) {
            this[name] = raw[name];
        }
    }
}
Thingy.prototype.MyMethod = function() { /* ... */ };
Thingy.prototype.MyMethod2 = function() { /* ... */ };
Thingy.prototype.toRaw = function() {
    var raw, name, value;
    for (name in this) {
        if (this.hasOwnProperty(name)) {
            value = this[name];
            if (typeof value !== "function") {
                if (value.toRaw) {
                    raw[name] = value.toRaw();
                } else {
                    raw[name] = this[name];
                }
            }
        }
    }
};

ثم عند الحفظ في Firebase:

write(myObject.toRaw());

... وعند القراءة من Firebase:

var obj = new Thingy(read());

قد تتضمن المعالجة الأكثر تعقيدًا وضع مذكرة على الكائن الخام لإخبارك ما إذا كانت إحدى خصائص الكائن تستخدم هذا النمط، حتى تتمكن من استدعاء المنشئ بدلاً من مجرد نسخه.(سوف يلاحظ ذو العين النسر أن المثال أعلاه غير متماثل، فهو يسمح بذلك toRaw على الخصائص عند التسلسل في toRaw, ، ولكن لا يحدث ذلك عند إلغاء التسلسل Thingy.)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top