0

我在下面的私有/公共方法中使用语法JavaScript

function Cars() {
    this.carModel = "";
    this.getCarModel = function () { return this.carModel; }
    this.alertModel = function () {alert (this.getCarModel());}
}

但是当我调用一个方法时alertModel它有错误,因为this指向window对象因此找不到它: alert (this.getCarModel());-this指向窗口

var newObject = new Cars();
newObject.alertModel();

我也尝试在其中声明这些方法prototype,但它的作用相同。

Cars.prototype.getCarModel = function () {
    this.getCarModel = function () { return this.carModel; }
}
Cars.prototype.alertModel = function () {
alert (this.getCarModel());
}

我正在做的就是在没有这个的情况下调用它like

  Cars.prototype.alertModel = function () {
    alert (newObject.getCarModel());
    }

这是唯一的方法吗?因为在其他方法中它的作品。

4

3 回答 3

0

您的问题是您实际上已经在范围内声明了自由浮动函数。您需要了解 Javascript 中 Scope 和 Context 之间的区别。有趣的是,Pragmatic Coffeescript 对此进行了很好的讨论。这是另一个很好的资源

于 2013-02-24T09:40:54.743 回答
0

尝试这个:

function Cars() {
    var carModel = "";
    this.getCarModel = function() { return carModel; };
    this.alertCarModel = function() { alert (carModel) };
}

这样 carModel 将是私有的,不能公开访问,只能通过 alertCarModel 和 getCarModel 方法。

于 2013-02-24T09:55:14.210 回答
0

尝试这个:

function Cars() {
    this.carModel = "";
    this.getCarModel = function () { return this.carModel; }
    this.alertModel = function () {alert (this.getCarModel());}

    return {
     getCarModel: getCarModel,
     alertModel: alertModel
    }
}

var newObject = new Cars();
newObject.alertModel();
于 2013-02-24T09:57:36.990 回答