繁体   English   中英

从扩展类中的受保护方法访问扩展类中的公共方法-javascript继承

[英]access public method in extended class from protected method in extending class - javascript inheritance

我正在用Javascript继承进行练习,我的第一次尝试是以下代码:

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”方法不会从基类返回存储的数据,因为我无法从new_class中受保护的“ _getData”方法访问公共的“ get”类。

我该如何运行?

提前致谢。

诗:请原谅我的英语不好

如果您注释掉this.init函数(覆盖base_class _data场),使new_classgetData函数只是返回_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());

顺便说一下,你的英语很好

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM