2016-07-11 5 views
0

Ich brauche meine Funktion von innen neu zu laden, habe ich einen kleinen Schnipsel tatWie neu laden jquery plugin von innen?

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'});

Wie Sie sehen können, heißt es this keine Funktion ist. Aber wie kann this keine Funktion sein? Was vermisse ich?

+0

'Aber wie kann diese nicht eine Funktion sein,' weil es ein Objekt ist?. Um das zu tun, was Sie benötigen, erstellen Sie eine 'init()' -Funktion, die Sie beim Laden des Plugins aufrufen und danach an jedem Punkt, an dem Sie den ursprünglichen Zustand wiederherstellen möchten –

Antwort

1

Es ist, weil this ein Objekt ist, keine Funktion. Versuchen Sie, eine init Funktion stattdessen verwenden, wie @RoryMcCrossan vorgeschlagen:

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'});

Verwandte Themen