将方法绑定到 returns 其他对象的对象

Binding methods to object that returns other object

假设我有以下 class:

var ie = function() {
    return new ActiveXObject('InternetExplorer.Application');
}

现在我想为 IE 的 Navigate 方法起别名,例如:

ie.prototype.goto = function() {
    this.Navigate('http://www.google.com'); // where 'this' should be ie
}

当然,那是行不通的,我想这是因为 class 没有意识到它的 "type change" 在它之前 returns 它。那么如何将 .goto() 方法绑定到 [Internet Explorer] 而不是 [object Object]?据我了解,这时 call()、apply() 或 bind() 就派上用场了,但我真的不知道如何使用它们。

您可以在 return 它们之前将函数添加到您的对象:

var ie = function() {
    var ieObj = new ActiveXObject('InternetExplorer.Application');
    ieObj.goto = function () { ieObj.Navigate('http://www.google.com'); };

    return ieObj;
};

var nav = ie();
nav.goto();

new ActiveXObject() 不是 return ActiveXObject 的实例,因此您无法修改原型以使您自动创建的所有实例都具有特定方法。即使您可以这样做,也意味着您创建的 all ActiveXObject 将具有该方法,这不是理想的情况。