Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/396.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 类似jQuery的体系结构_Javascript_Jquery_Architecture_Reverse Engineering - Fatal编程技术网

Javascript 类似jQuery的体系结构

Javascript 类似jQuery的体系结构,javascript,jquery,architecture,reverse-engineering,Javascript,Jquery,Architecture,Reverse Engineering,我试图在我的应用程序中创建一个类似jQuery的体系结构,但我无法得到预期的结果 在jQuery中,“jQuery对象实际上只是init构造函数‘增强’” 这意味着当您启动jQuery对象时 $('selector') jQuery返回 new jQuery.fn.init( selector, context, rootjQuery ); jQuery原型定义为 jQuery.fn = jQuery.prototype = { constructor: jQuery, init: func

我试图在我的应用程序中创建一个类似jQuery的体系结构,但我无法得到预期的结果

在jQuery中,“jQuery对象实际上只是init构造函数‘增强’”

这意味着当您启动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;

})()

您的
baslat
功能有故障:

  • 您在
    MetinKodu.lenght>0
    中拼错了
    length
  • 您返回的是
    metinKodlari
    数组,而您应该返回新创建的
    this
    上下文。jQuery使用
    this
    上的
    makeArray
    将传递的DOM元素像jQuery对象一样存储在数组中。但是,在您的情况下,您只需要将传递的元素存储在
    metinKodlari
    数组中,而不是存储在
    这个
    对象本身上
这应该起作用:

    baslat: function(MetinKodu) {
        if ($.isArray(MetinKodu) && MetinKodu.length > 0) {
            this.metinKodlari = MetinKodu;
        } else {
            this.metinKodlari = (MetinKodu) ? [MetinKodu] : [''];
        }
        return this;
    }

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

return this.metinKodlari;
。。。它返回您的内部数组(您可以使用数组的数组)

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

return this.metinKodlari;