我的代码-面向对象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

我不熟悉JavaScript中的面向对象编程。我不确定以下程序有什么问题:

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();}