2013-02-02 11 views
8

Pisanie wtyczek z jQuery jest stosunkowo łatwe, po prostu użyj $ .fn i jesteś na dobrej drodze. Podobnie jak:Jak napisać wtyczkę javascript bez jQuery

$.fn.analyse = function() { 
... 
} 

Ale co, jeśli nie możesz używać jQuery?

Powiedzmy, że chcemy, aby móc użyć następującego kodu:

document.querySelector("#mydiv").analyse(); 

mogę iść o nim tak:

Object.prototype.analyse = function() { 
... 
} 

Ale z tego co rozumiem to jest mile widziana!

+1

Następnie wystarczy napisać funkcję, która akceptuje elementu DOM. –

+0

Jakie jest dokładnie twoje pytanie? Możesz stworzyć typ obiektu, który zastąpi jQuery i zmodyfikuje go - potrzebujesz tylko trochę hydrauliki, aby dokonać selekcji, jak sądzę. – Hogan

+0

@Hogan Przepraszamy za spóźnioną odpowiedź. Pytanie brzmi: Jaki jest preferowany sposób rozszerzenia funkcjonalności obiektu, jeśli "Object.prototype.extension" jest mile widziane? –

Odpowiedz

26

Oto coś na początek:

var proto_methods = { 
    analyse: function() { 
     var node = this.node; 

     // ... 
    } 
}, wrap, _wrap; 

_wrap = function(selector) { this.node = document.querySelector(selector); }; 
_wrap.prototype = proto_methods; 

wrap = function(selector) { 
    return new _wrap(selector); 
}; 

Używaj go tak:

wrap("#mydiv").analyse(); 

Użyj tego jeśli chcesz dodać więcej wtyczek (i jest to trochę bardziej zorientowany obiektowo):

var pack = { 
    binder: [{}] 
}; 

pack.query_bind = function(bound) { 
    if (bound) pack.binder[1] = bound; 
}; 

pack.fn = function(attributes) { 
    for (var i in attributes) pack.binder[0][i] = attributes[i]; 
}; 

var _wrap = function(selector) { 
    this.node = /^(#|.)\w+/.test(selector) ? pack.binder[1](selector) : {}; 
}; 

_wrap.prototype = pack.binder[0]; 

var wrap = function(selector) { 
    pack.query_bind(document.querySelector.bind(document)); 
    return new _wrap(selector); 
}; 

wrap.fn = pack.fn; 

wrap.fn({ 
    cool: function() {}, 
    nice: function() {} 
}); 

wrap('#mydiv').cool(); 

można zadzwonić wrap.fn w dowolnym momencie i prototyp zostanie zaktualizowany.

Należy jednak pamiętać, że to nie jest prawdziwy zamiennik jQuery jak istnieje wiele rzeczy, które nie zostały uwzględnione w tym kodzie. Funkcja wrap nie jest tak zaawansowana i użyteczna, jak jQuery's $ na wiele sposobów.

Mam nadzieję, że to pomoże.

+1

Dzięki ... Bardzo mi to pomogło .. Jak ustawić opcje w tym? –

+2

Czy chciałbyś komentować każdą sekcję, wyjaśniając, dlaczego wybrałeś to tak, jak jest? teraz jest to po prostu zrzut kodu, z funkcjami wywołującymi się nawzajem i tworzącymi instancje. nie da się samemu wytłumaczyć – vsync

Powiązane problemy