$.fn
è solo un oggetto. Non c'è magia quando si aggiunge una nuova proprietà al prototipo di $
. Quindi, il codice $.fn.myPlugin = function() {}
è uguale a $.prototype.myPlugin = function() {}
.
$.fn === $.prototype; // true
Per essere in grado di chiamare una funzione sull'oggetto $
in modo standard ($('div').func()
), è necessario aggiungere questa funzione per l'oggetto $
.
Non lo si aggiunge al codice es6.
Così,
import $ from 'jquery';
export default class myPlugin extends $ {
// Could i use constructor() method ???
}
Means (quasi)
var myPlugin = function() {};
myPlugin.prototype = Object.create($.prototype);
return { default: myPlugin };
Non sono sicuro che si dovrebbe estendere $ .fn, ma forse ne avete bisogno.
E con
import $ from 'jquery';
import myPlugin from 'myPlugin.es6';
significa
var $ = require('jquery');
var myPlugin = require('myPlugin'); // a reference to the 'export.default' object from 'myPlugin.es6'
Pertanto, non v'è alcuna connessione tra $.fn
oggetto e myPlugin
funzione.
È necessario creare la connessione da qualche parte. Potrebbe essere in un modulo speciale come plugins
dove si inietta tutti i plugin necessari nell'oggetto $.fn
:
import $ from 'jquery';
import plugin1 from 'plugin1.es6'; // should contain 'name'
import plugin2 from 'plugin2.es6';
...
import plugin10 from 'plugin10.es6';
[plugin1, plugin2, ..., plugin10].forEach(plugin => $.fn[plugin.name] = plugin);
Oppure si potrebbe aggiungere un metodo di 'inizializza' per l'oggetto esportato in 'myplugin.es6 ', e chiamalo prima del primo utilizzo: init($) { $.fn.myPlugin = myPlugin; }
E così via.
'estende $' non ha senso. Pensavate che significasse lo stesso di '$ .extend ({...})'? – Bergi
Se stai guardando le nuove funzionalità di Javascript, probabilmente non hai bisogno di jQuery. Esistono molte librerie UI standalone che non richiedono jQuery. Inoltre, esiste un sito Web speciale http://youmightnotneedjquery.com/ che spiega come passare da jQuery a funzioni native. –