سؤال

وهناك طريقة في جافا سكريبت لترث أعضاء خاص من الفئة الأساسية إلى فئة فرعية؟

وأريد أن أحقق شيئا من هذا القبيل:

function BaseClass() {
  var privateProperty = "private";

  this.publicProperty = "public";
}

SubClass.prototype = new BaseClass();
SubClass.prototype.constructor = SubClass;

function SubClass() {
  alert( this.publicProperty );   // This works perfectly well

  alert( this.privateProperty );  // This doesn't work, because the property is not inherited
}

وكيف يمكنني تحقيق محاكاة مثل الطبقة، كما هو الحال في غيرها من اللغات ووب (على سبيل المثال C ++) حيث أستطيع أن ترث (المحمية) الممتلكات الخاصة؟

وشكرا لكم، ديفيد شرايبر

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

المحلول

دوغلاس Crockfords نمط منشئ السلطة (وصلة هو شريط فيديو)، يمكنك تحققان محمية متغيرات مثل هذا:

function baseclass(secret) {
    secret = secret || {};
    secret.privateProperty = "private";
    return {
        publicProperty: "public"
    };
}

function subclass() {
    var secret = {}, self = baseclass(secret);
    alert(self.publicProperty);
    alert(secret.privateProperty);
    return self;
}

ملحوظة: مع نمط منشئ السلطة، وكنت لا تستخدم new. بدلا من ذلك، أقول var new_object = subclass();.

نصائح أخرى

العلامة الخاصة بك خاص المتغيرات مع بعض نوع من علامات مثل تسطير رائد _ وبهذه الطريقة يمكنك أعلم أنه متغير الخاص (على الرغم من الناحية الفنية ليس)

this._privateProperty = "private";
alert( this._privateProperty )

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

لا يمكن أن يتم ذلك، ولكن هل يمكن حذف الخاصية من النموذج الأولي من الدرجة بحيث لا يورث ذلك:

SubClass.prototype.privateProperty  = undefined;

وبهذه الطريقة لن تكون موروثة، ولكن ما عليك القيام به أن كل الممتلكات "خاصة" في الصف الأساسي الخاص بك.

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