باستخدام Class النموذجي. قم بتحديد الخصائص والأساليب الخاصة المحمية
-
23-08-2019 - |
سؤال
هناك طريقة تعميم جيدة لتحديد الخصائص والأساليب الخاصة المحمية في جافا سكريبت، هنا على الموقع. وبعد ومع ذلك، لا يحتوي الإصدار الحالي من النموذج الأولي (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();
}
});
وهنا نظرية دوغلاس كروكفورد حول هذا الموضوع.
نصائح أخرى
هناك مناقشة هنا في منارة النموذج الأولي الذي يوضح أنه يفسر لماذا لا يمكنك الحصول على هذا التأثير مع فئة النموذج الأولي.
المفتاح هو إضافة الأساليب العامة كإغلاقات، كما في المثال أدناه:
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