this" 指的是 window 对象

this" refers to window object

在 BusMonitor 对象中,"this" 指的是 window 对象,这就是为什么当我调用 BaseFunction.call 时 "name" 属性 成为整个脚本的全局对象(这) 在 BusMonitor 对象上。我只希望 BaseFunction 的属性仅对 BusMonitor 对象可用。怎么做?

function BaseFunction() {

    this.name = "test";

}

var BusMonitor = function () {

    BaseFunction.call(this);

    return {
        init: function () {
        }
    }

}();

我可以通过下面的方式来做,但我不想创建这样的对象。

function BusMonitor () {

    BaseFunction.call(this);

    return {
        init: function () {

        }
    }

};

var busMonitor = new BusMonitor();
busMonitor.init();

您可以在 BusMonitor 中定义一个 localScope 来保存名称值,如下所示:

function BaseFunction() {
    this.name = "test";
}

var BusMonitor = function () {
    var localScope = {};
    BaseFunction.call(localScope);
    console.log("local name:" + localScope.name);
    return {
        init: function () {
        }
    }

}();
console.log("global name: " + name);

当然,如果可能的话,您可以先创建对象,然后将其传递给 BaseFunction

function BaseFunction() {
    this.name = "test";
}

var BusMonitor = function () {
    var obj = {
        init: function () { }
    };

    BaseFunction.call(obj);

    return obj;
}();