Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/388.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
使用jquery的javascript中的函数范围_Javascript_Jquery - Fatal编程技术网

使用jquery的javascript中的函数范围

使用jquery的javascript中的函数范围,javascript,jquery,Javascript,Jquery,如您所见,im试图将我的新css参数推送到loadedcss变量。它说错误未定义这个。loadedcss也许我错过了一些东西 $.plugin = { loadedcss : [], add: function(params) { $.each(params["css"], function(key,value) { // this.loadedcss error undefined this.loade

如您所见,im试图将我的新css参数推送到
loadedcss
变量。它说错误未定义这个。loadedcss也许我错过了一些东西

$.plugin = {

    loadedcss   : [],

    add: function(params) { 
        $.each(params["css"], function(key,value) { 
            // this.loadedcss error undefined
            this.loadedcss.push(value);
        });
    },

    end: function(){
        //console.log(this.loadedcss);
    }
};

我们如何将我的
参数['css']
推送到
这个.loadedcss

$。插件只是一个对象。它应该是一个函数,以便创建它的新实例,然后您可以在其方法中使用
this
。你现在可以试试这个

$.plugin.add({
    css: ['framework.css','csstest.css']
}); 

$.plugin.add({
    css: ['framework.css','csstest.css']
}); 

    $.plugin.end();
你可以试试

$.plugin = {

    loadedcss   : [],

    add: function(params) { 
        $.each(params["js"], function(key,value) { 
          // this.loadedcss error undefined
          $.plugin.loadedcss.push(value);
        });
    },

    end: function(){
        //console.log(this.loadedcss);
    }
};
它将允许您使用内部变量以及副作用

或者

$.plugin = (function(){
var methods = {
   loadedcss   : [],

    add: function(params) { 
       // IF IN ARRAY NOT LOADED THEN PUSH CSS
      if ($.inArray(params['css'],this.loadedcss) == -1) {
         // error undefined this.loadedcss
         methods.loadedcss.push(params['css']);
       };
     },
     ...
   };

return methods;
})();

还将使用

参数别名为其他参数(
下例中的self
),然后在回调函数中使用该别名

add: function(params) { 
    var me = this;
    $.each(params["js"], function(key,value) { 
        // this.loadedcss error undefined
        me.loadedcss.push(value);
    });
}

您不能在回调中使用
,因为
$。each()
将其设置为当前数组元素的值。

它对我有效。抱歉,我错过了真正的代码。顺便说一句,您的代码中混入了
css
js
。JSON是一种符号,而不是数据类型。@Alnitak-是的,它不是数据类型。@user397916-对于您编辑的代码,您仍然不能使用它,因为它将指向当前值params[“js”]集合或映射。检查我编辑过的答案。@ShankarSangoli我的观点是Javascript中没有“json对象”这样的东西。他在这里有一个对象文字,它恰巧看起来像JSON。@Alnitak-我完全同意你的看法:)最后返回方法。。我在书里什么地方都没找到,安德鲁,有什么好的联系吗?thanks@Andrew我认为您的语法是错误的-方法返回模式通常用于
new
(jQuery插件不使用该模式)或作为立即调用的函数表达式的返回值。您需要将其包装为:
$.plugin=(function(){…})(
@user397916不是真的,我是从阅读jQuery源代码中学到的。这真的很好,因为它让你的插件有私有变量。@user397916一个例子可以在jQuery指南中找到
add: function(params) { 
    var self = this;
    $.each(params["css"], function(key,value) { 
        self.loadedcss.push(value);
    });
},