我正在练习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”类。
我怎样才能让它运转?
提前致谢。
Ps。:请原谅我可怜的英语
答案 0 :(得分:1)
如果您注释掉this.init
功能(覆盖base_class
_data
字段)并制作new_class
' s 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());
顺便说一句,你的英语很好:)。