2016-07-11 1 views
0

J'ai besoin de recharger ma fonction à l'intérieur, je l'ai fait un petit extrait:Comment recharger le plugin jquery depuis l'intérieur?

function jqueryPlugin (selector, properties) { 
 
    this.properties = { 
 
     foo: properties.foo || 'foo', 
 
     bar: properties.bar || 'bar' 
 
    }; 
 
    // this.element = $(selector); 
 
    // ... 
 
    console.log('element loaded... plugin start working...') 
 
    // ... 
 
    this.reload = function (properties) { 
 
     // ... 
 
     this(selector, properties); // ?? 
 
    }; 
 
}; 
 

 
var instance = new jqueryPlugin('.foobar', {foo:'foooo'}); 
 
// ... 
 
instance.reload({foo:'foobar'});

Comme vous pouvez le voir, il dit this n'est pas une fonction. Mais comment est-ce que this ne peut pas être une fonction? Qu'est-ce que je rate?

+0

'Mais comment cela peut-il pas une fonction' parce que c'est un objet?. Pour faire ce que vous avez besoin, créez une fonction 'init()' que vous appelez en charge du plugin et ensuite tout point après lequel vous voulez le réinitialiser à son état d'origine –

Répondre

1

C'est parce que this est un objet, pas une fonction. Essayez d'utiliser une fonction à la place init, comme @RoryMcCrossan suggéré:

function jqueryPlugin (selector, properties) { 
 
    this.init = function(selector, properties){ 
 
     this.properties = { 
 
      foo: properties.foo || 'foo', 
 
      bar: properties.bar || 'bar' 
 
     }; 
 
     
 
     //test if `this` is a function: console.log(this); 
 

 
     // this.element = $(selector); 
 
     // ... 
 
     console.log('element loaded... plugin start working...') 
 
     // ... 
 
    }; 
 
    this.reload = function (properties) { 
 
     // ... 
 
     this.init(selector, properties); // ?? 
 
    }; 
 
    this.init(selector, properties); 
 
}; 
 

 
var instance = new jqueryPlugin('.foobar', {foo:'foooo'}); 
 
// ... 
 
instance.reload({foo:'foobar'});