2

我正在尝试在我的应用程序中创建类似 jQuery 的架构,但我无法获得预期的结果。

在 jQuery 中“jQuery 对象实际上只是初始化构造函数'增强'”。

jQuery = function( selector, context ) {
    return new jQuery.fn.init( selector, context, rootjQuery );
},

这意味着当您启动 jQuery 对象时;

$('selector')

jQuery 返回

new jQuery.fn.init( selector, context, rootjQuery );

jQuery 原型定义为;

jQuery.fn = jQuery.prototype = {
constructor: jQuery,
init: function( selector, context, rootjQuery ) {
    var match, elem, ret, doc;
            ...
            return jQuery.makeArray( selector, this ); // An array
    }
...
size: function() {
    return this.length;
},
...

jQuery 的所有有用属性和方法(如 hide()、show() exct.)都由 jQuery 对象的原型保存。

并将init方法的原型赋值为jQuery的原型;

jQuery.fn.init.prototype = jQuery.fn; 

好!。我的问题是我尝试使用此架构,但无法获取返回值的属性和方法。

这是我的代码;

(function() {

Metinler = function(MetinKodu){
    return new Metinler.sub.baslat( MetinKodu );
}



Metinler.sub = Metinler.prototype = {
    metinKodlari: [],
    constructor: Metinler,
    topla: function(){
        return this.metinKodlari[0] + this.metinKodlari[1];
    },
    baslat: function(MetinKodu) {
        if($.isArray(MetinKodu) && MetinKodu.length > 0) {

            this.metinKodlari = MetinKodu;
        }else{
            this.metinKodlari = (MetinKodu) ? [MetinKodu] : [''];
        }

        return this.metinKodlari;
    }
}
Metinler.sub.baslat.prototype = Metinler.sub;

window.Metinler = Metinler;

})()

代码

4

2 回答 2

1

你的baslat功能有问题:

  • 你拼错lengthMetinKodu.lenght > 0
  • 您正在返回metinKodlari数组,而您应该返回新创建的this上下文。jQuery 使用makeArrayonthis将传递的 DOM 元素存储在类似数组的 jQuery 对象中。但是,在您的情况下,您只想将传递的元素存储在metinKodlari数组中,而不是this对象本身。

这应该有效:

    baslat: function(MetinKodu) {
        if ($.isArray(MetinKodu) && MetinKodu.length > 0) {
            this.metinKodlari = MetinKodu;
        } else {
            this.metinKodlari = (MetinKodu) ? [MetinKodu] : [''];
        }
        return this;
    }
于 2012-08-28T09:33:30.553 回答
1

您看到的问题是您的构造函数正在返回一个特定值:

return this.metinKodlari;

...它返回您的内部数组(嗯,您的数组数组)。

删除此行,您将返回您的baslat实例。

于 2012-08-28T09:35:23.380 回答