将方法绑定到 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
将具有该方法,这不是理想的情况。
假设我有以下 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
将具有该方法,这不是理想的情况。