我的代码-面向对象javascript有什么问题
我不熟悉JavaScript中的面向对象编程。我不确定以下程序有什么问题:我的代码-面向对象javascript有什么问题,javascript,Javascript,我不熟悉JavaScript中的面向对象编程。我不确定以下程序有什么问题: function Sample() { var data = "one"; var getData = function () { return data; }; this.getter = function () { getData(); }; } var s = new Sample; alert(s.getter()); // aler
function Sample() {
var data = "one";
var getData = function () {
return data;
};
this.getter = function () {
getData();
};
}
var s = new Sample;
alert(s.getter()); // alerts undefined
上面的程序没有像我预期的那样工作,但是下面的程序可以:
function sample() {
var data = "one";
var getData = function () {
return data;
};
this.getter = function () {
return getData();
};
}
var s = new Sample;
alert(s.getter()); // alerts "one"
为什么会这样?您需要使用,因为您的
getter
方法不会向调用者返回任何值
在getter
中,您正在调用getData
方法,该方法返回data
的值,但该值不会发送回getter
的调用者
this.getter = getData
或
答案只存在于代码中。第一种情况下你不会回来。如果你不回来,你怎么让它保持警惕呢。您的第二个代码片段修复了这个问题。您没有从
示例的第一个getter
返回任何内容。这就是为什么您在第一个代码示例中得到未定义的,您没有返回任何值-只是调用函数getData
。返回值不会进一步“传播”(不会作为getter
函数的返回值进一步传递)
// Here you are just calling getData
this.getter = function () {getData();}
// Here you are returning the value returned by getData function
this.getter = function () {return getData();}
代码的错误在于第一个版本是错误的(getter中没有“return”),而第二个版本(可以正常工作)是正确编写的。此外,我认为用JavaScript编写正确的面向对象代码是不可能的。你可以很接近,但永远都不可能,最好不要尝试。获取函数返回值。你应该使用return
关键字。this.getter=function(){return getData();}
是正确的语句。
// Here you are just calling getData
this.getter = function () {getData();}
// Here you are returning the value returned by getData function
this.getter = function () {return getData();}