доступ к публичному методу в расширенном классе из защищенного метода в расширенном классе - наследование JavaScript - PullRequest
0 голосов
/ 26 января 2012

Я практикуюсь с Javascript Inheritance, моя первая попытка заключается в следующем коде:

var base_class = function() 
{
    var _data = null;

    function _get() {
        return _data;
    }

    this.get = function() {
        return _get();
    }

    this.init = function(data) {
    _data = data;
    }       
}

var new_class = function() {

    base_class.call(this);

    var _data = 'test';

    function _getData() {
        return this.get();
    }

    this.getDataOther = function() {
        return _getData();
    }

    this.getData = function() {
        return this.get();
    }   

    this.init(_data);
}

new_class.prototype = base_class.prototype;

var instance = new new_class();

alert(instance.getData());
alert(instance.getDataOther());

На данный момент я действительно доволен своим решением, но есть одна проблема, которую я не могу решить.

метод "getDataOther" не возвращает сохраненные данные из базового класса, потому что я не могу получить доступ к общедоступному классу "get" из защищенного метода "_getData" в new_class.

Какмогу ли я это запустить?

Заранее спасибо.

Ps .: Пожалуйста, извините за мой плохой английский

1 Ответ

1 голос
/ 26 января 2012

Если вы закомментируете функцию this.init (которая перезаписывает поле base_class _data) и заставите функцию new_class getData просто вернуть _data, вы сможете получить различные переменные .

var base_class = function() 
{
    var _data = null;

    function _get() {
        return _data;
    }

    this.get = function() {
        return _get();
    }

    this.init = function(data) {
        _data = data;
    }       
}

var new_class = function() {
    var self = this;    //Some browsers require a separate this reference for
                        //internal functions.
                        //http://book.mixu.net/ch4.html

    base_class.call(this);

    var _data = 'test';

    function _getData() {

        return self.get();
    }

    this.getDataOther = function() {
        return _getData();
    }

    this.getData = function() {
        return _data;   //Changed this line to just return data
                        //Before, it did the same thing as _getData()
    }   

    //this.init(_data); //Commented out this function (it was changing the base_class' data)
}

new_class.prototype = base_class.prototype;

var instance = new new_class();

alert(instance.getData());
alert(instance.getDataOther());

Кстати, ваш английский в порядке:)

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