tQuery.js
(function( window, undefined ) {
var
// Referência à raiz jQuery(document)
rootjQuery,
// Usa o documento correto de acordo com a chamada (sandbox)
document = window.document,
location = window.location,
core_version = "a.0.0",
init_selector,
jQuery = function( selector, context ) {
// O objeto jQuery é realmente o construtor init 'melhorado'
return new jQuery.fn.init( selector, context, rootjQuery );
}
jQuery.fn = jQuery.prototype = {
// Versão corrente do jQuery
jquery: core_version,
constructor: jQuery,
init: function( selector, context, rootjQuery ) {
var match, elem;
init_selector = selector;
// Manipula: $(""), $(null), $(undefined), $(false)
if ( !selector ) {
return this;
}
},
size: function() {
if( typeof(this) == 'object' ){
var len = 0;
for (var o in this) {
len++;
}
}
this.context = document;
this.size = len;
return this;
},
version: function() {
this.versao = this.jquery;
return this;
}
}
window.jQuery = window.$ = jQuery;
jQuery.fn.init.prototype = jQuery.fn;
rootjQuery = jQuery(document);
})( window );
Agora vamos executar o arquivo HTML alterado:
rtQuery.html
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1" />
<title>jQuery Demo</title>
<script type="text/javascript" src="tQuery.js"></script>
</head>
<body id="b1" name="nb1" OnLoad="inicia();">
<p id="p1" name="np1">xxx xxx xxx</p>
</body>
<script>
function inicia(){
var a = $("#p1").version().size();
}
</script>
</html>
Vamos exibir apenas a fase de debug ao chegar no método "version":
Como "version" devolve "this", que é um ponteiro para a instância jQuery, quando o método "size" é invocado ...
e processado ...
o erro não mais ocorre.
No entanto, existe um erro de concepção. O método "size" deveria ser método de "version", portanto deveria estar dentro da sua definição. Fizemos esta "gambiarra" apenas para mostrar a concepção que possibilita métodos chamarem métodos dentro do objeto jQuery.
Nenhum comentário:
Postar um comentário