Function#call
peut être utilisé pour appeler fetch_page
, en spécifiant la valeur à utiliser comme this
: fetch_page.call(this)
.
Alors ES5 de Function#bind
ou jQuery de $.proxy
(je pense que vous utilisez jQuery, des promesses que vous utilisez, mais il est une estimation — Mise à jour: Et je me suis trompé, mais je vais laisser l'info dans les personnes utilisant jQuery trouvent la réponse) pour créer une version liée de parse_page
(c'est-à-dire, une fonction qui, lorsqu'elle est appelée, appellera parse_page
avec une adresse spécifique this
).
Function#bind
:
Google.prototype.search = function(keyword){
this.keyword = keyword || this.keyword;
fetch_page.call(this).then(parse_page.bind(this)).then(function(){
console.log('done');
});
});
Notez que Function#bind
est de ES5, de sorte que vous aurez envie de vérifier que tous les navigateurs que vous voulez avoir. Si ce n'est pas le cas, c'est l'une des fonctionnalités ES5 qui peut être "calée" sur les anciens navigateurs; recherchez "ES5 shim" pour trouver plusieurs options.
jQuery de $.proxy
:
Google.prototype.search = function(keyword){
this.keyword = keyword || this.keyword;
fetch_page.call(this).then($.proxy(parse_page, this)).then(function(){
console.log('done');
});
});
Avez-vous essayé 'fetch_page.call (this) .alors (function (r) {console.log ("fait");})'? –
C'est comment enchaîner la deuxième promesse avec l'appel. Cela ne déclencherait-il pas la fonction plutôt que de fournir la portée? – lededje