Объявление защищенной переменной в JavaScript - PullRequest
2 голосов
/ 23 сентября 2011

Как мне объявить защищенную переменную. Позвольте мне привести пример здесь

// Constructor
function Car(){

   // Private Variable
   var model;
}

// Public variable
Car.prototype.price = "5 Lakhs";

// Subtype
function Indiancar(){
}

// Prototype chaining
Indiancar.prototype = new Car();


// Instantiating Superclass object
var c = new Car();

// Instantiating subclass object
var ic = new Indiancar();

в этом я хотел бы иметь переменную, которая доступна как ic.variabl, которая также присутствует в классе автомобиля.

Ответы [ 2 ]

6 голосов
/ 23 сентября 2011

Вы бы сделали что-то вроде этого:

var Base = function()
{
    var somePrivateVariable = 'Hello World';

    this.GetVariable = function()
        {
            return somePrivateVariable;
        };

    this.SetVariable = function(newText)
        {
            somePrivateVariable = newText;
        };
};

var Derived = function()
{
};

Derived.prototype = new Base();

var instance = new Derived();

alert(instance.GetVariable());
instance.SetVariable('SomethingElse');
alert(instance.GetVariable());

Если я правильно понял ваш вопрос.

РЕДАКТИРОВАТЬ: Обновление с истинной «частной» переменной.

4 голосов
/ 26 ноября 2012

Есть способ определить защищенные переменные в JavaScript:

Функция конструктора в javascript может вернуть любой объект (необязательно this ).Можно создать функцию конструктора, которая возвращает прокси-объект, который содержит прокси-методы для «реальных» методов «реального» объекта экземпляра.Это может показаться сложным, но это не так;Вот фрагмент кода:

var MyClass = function() {
    var instanceObj = this;
    var proxyObj = {
        myPublicMethod: function() {
            return instanceObj.myPublicMethod.apply(instanceObj, arguments);
        }
    }
    return proxyObj;
};
MyClass.prototype = {
    _myPrivateMethod: function() {
        ...
    },
    myPublicMethod: function() {
        ...
    }
};

Приятно то, что создание прокси может быть автоматизировано, если мы определим соглашение для именования защищенных методов.Я создал небольшую библиотеку, которая делает именно это: http://idya.github.com/oolib/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...