0

第二个console.log()执行者WSFunctions[this.name]();将打印undentified。我想知道我是否能够以某种方式发挥inherit DoThisAndThat我的Call()作用。我不想以这种方式传递参数,WSFunctions[this.name](this.params)因为随着项目的发展,可能会有更多的事情this.params通过。

function WS(name, params) {
    this.name = name;
    this.params = params;
}

WS.prototype.Call = function() {
    if (typeof WSFunctions[this.name] !== "function") {
        return false;
    }

    console.log(this.params);
    WSFunctions[this.name]();

    return true;
}

var WSFunctions = {
    'ScreenRightGuest': function() {
        // .. whatever ..
        return true;        
    },
    'DoThisAndThat': function() {
        console.log(this.params);
        return true;
    }
}


new WS('DoThisAndThat', { login: '123', pass: 'abc' }).Call();

在此先感谢迈克

4

1 回答 1

0

您可以使用[MDN][MDN]this显式设置函数中应引用的内容.call .apply

WSFunctions[this.name].call(this);

这将调用WSFunctions[this.name]设置thisthis调用者中引用的内容(在这种情况下是由创建的实例new WS(...))。

另请查看此页面,该页面彻底解释了其this工作原理。

于 2012-08-14T14:52:38.700 回答