باستخدام Class النموذجي. قم بتحديد الخصائص والأساليب الخاصة المحمية

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

سؤال

هناك طريقة تعميم جيدة لتحديد الخصائص والأساليب الخاصة المحمية في جافا سكريبت، هنا على الموقع. وبعد ومع ذلك، لا يحتوي الإصدار الحالي من النموذج الأولي (1.6.0) على طريقة مدمجة لتحديدها من خلال Class.create() بناء الجملة.

أنا فضولي عما أفضل الممارسات عندما يرغب المطورون في تحديد الخصائص والأساليب الخاصة المحمية عند استخدام النموذج الأولي. هل هناك طريقة أفضل من عام واحد؟

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

المحلول

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

إليك مثال رمز:

// properties are directly passed to `create` method
var Person = Class.create({
   initialize: function(name) {
      // Protected variables
      var _myProtectedMember = 'just a test';

      this.getProtectedMember = function() {
         return _myProtectedMember;
      }

      this.name = name;
   },
   say: function(message) {
      return this.name + ': ' + message + this.getProtectedMember();
   }
});

وهنا نظرية دوغلاس كروكفورد حول هذا الموضوع.

http://www.crockford.com/javascript/private.html.

نصائح أخرى

هناك مناقشة هنا في منارة النموذج الأولي الذي يوضح أنه يفسر لماذا لا يمكنك الحصول على هذا التأثير مع فئة النموذج الأولي.

المفتاح هو إضافة الأساليب العامة كإغلاقات، كما في المثال أدناه:

 Bird = Class.create (Abstract,(function () {
    var string = "...and I have wings"; //private instance member
    var secret = function () {
        return string;
    } //private instance method
    return {
        initialize: function (name) {
            this.name = name;
        }, //constructor method
        say: function (message) {
            return this.name + " says: " + message + secret();
        } //public method
    }
})());

Owl = Class.create (Bird, {
    say: function ($super, message) {
        return $super(message) + "...tweet";
    } //public method
})

var bird = new Bird("Robin"); //instantiate
console.log(bird.say("tweet")); //public method call

var owl = new Owl("Barnie"); //instantiate
console.log(owl.say("hoot")); //public method call inherit & add
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top