هل من الممكن إنشاء أو تبادل خصائص جافا سكريبت عند الوصول

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

سؤال

أرغب في الحصول على نوع من خصائص الكائنات البطيئة في جافا سكريبت وبالتالي أرغب في زيادة تحميل خاصية الوصول للقراءة والكتابة بطريقة أو بأخرى، على سبيل المثال:

var someval = myobj.lazyprop; // invokes myobj.get("lazyprop");
myobj.lazyprop = someval;     // invokes myobj.set("lazyprop",someval);

حيث myobj هو بعض الكائنات التي أقدمها للبرنامج النصي.

الأساس المنطقي:أرغب في استخدام Javascript (Rhino) كمحرك برمجة نصية في أحد التطبيقات ويمكن أن تكون هياكل البيانات التي يجب الوصول إليها بواسطة البرامج النصية كبيرة جدًا ومعقدة.لذلك لا أرغب في تغليفهم جميعًا مسبقًا بكائنات جافا سكريبت، خاصة.نظرًا لأن البرنامج النصي المتوسط ​​في هذا التطبيق سيحتاج فقط إلى مجموعة فرعية صغيرة جدًا منها.من ناحية أخرى، أريد أن تكون البرامج النصية بسيطة وسهلة القراءة قدر الإمكان، لذلك لا أريد أن أطلب استخدام أساليب get أو set مع وسيطات السلسلة بشكل صريح في البرامج النصية.

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

المحلول

يمكنك القيام بذلك باستخدام وحيد القرن 1.6R6 أو أعلى مع حروف جافا سكريبت والمستوطنين.

function Field(val){
   var value = val;

   this.__defineGetter__("value", function(){
       return value;
   });

   this.__defineSetter__("value", function(val){
       value = val;
   });

}

الآن، إذا أردنا، بدلاً من ذلك، تحديد الحروف والمحددات في سياق النموذج الأولي للكائن الخاص بنا (وحيث يكون وجود بيانات "خاصة" أقل أهمية) فيمكننا بعد ذلك استخدام بناء جملة كائن بديل لذلك.

function Field(val){
   this.value = val;

}

Field.prototype = {
   get value(){
       return this._value;
   },
   set value(val){
       this._value = val;
   }

};

نصائح أخرى

تدعم العديد من محركات JS الحروف والمحددات على كائنات جافا سكريبت:

var obj = {
  get field() {alert('getting field');}
  set field(val) {alert('setting field to ' + val);}
}

var x = obj.field     // alert pops up
obj.field = 'hello'   // alert pops up

المزيد من التفاصيل:

http://robertnyman.com/2009/05/28/getters-and-setters-with-javascript-code-samples-and-demos/

إصدارات وحيد القرن> 1.6R6 الحروف الداعمة والمحددات، يمكنك كتابة شيء مثل هذا:

var myobj = {
  // a getter and setter
  get lazyprop(){ return this.get('lazyprop'); },
  set lazyprop(val){ return this.set('lazyprop', val); },

  // the logic of your get and set methods:
  get: function(p) { return this['_'+p]; },
  set: function(p, val) { this['_'+p] = val; }
};

أعتقد أن هذا شيء يجب عليك فعله باستخدام واجهة برمجة التطبيقات الخاصة بـ Rhino من جانب Java؛ليس من جافا سكريبت.

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