让不同的javascript文件共享相同的函数

Having different javascript files share the same function

本文关键字:函数 文件共享 javascript      更新时间:2023-09-26

现在我正在为WordPress创建一些插件。所有这些都需要单独工作,但是我想添加一个实现来让它们一起工作。

对于初学者来说,所有脚本都将使用自定义名称来引用jQuery,这是我的问题开始的第一部分。在WordPress中,我有一个组合对象,我想用所有的值填充。合并后的对象命名为:myObject .

现在我尝试这个,但它不工作:

if( typeof myObject.jq !== 'undefined' )
    myObject.jq = jQuery.noConflict();
myObject.jq(document).ready(function(){
}

我得到错误消息'myObject。jq'不是函数

我想用一个组合的ajax函数进一步扩展它,像这样

if( typeof myObject.jq !== 'undefined' ){
    myObject.jq = jQuery.noConflict();
    myObject.ajaxcall = function(action){
        var dfr = myObject.jq.Deferred();
        myObject.jq.ajax({
            url:myObject.ajaxurl,
            type:'post',
            data:{
                action:action,
                face:myObject.face
            },
            dataType:'json',
            success:dfr.resolve
        });
        return dfr.promise();
    };
}
myObject.jq(document).ready(function(){
    // My code here
}

这完全行不通。有人知道怎么让它工作吗?

你只是把'未定义'逻辑倒了。应该说是typeof myObject.jq === 'undefined'。虽然,由于jq预计是一个函数,更好的检查将是typeof myObject.jq !== 'function'

要使您的第一部分工作,您需要将myObject声明为object。javaScript将自动分配未定义的对象标识符,因此您不需要测试键是否存在。因此,将您的代码更改为以下内容即可:

var myObject = {};
myObject.jq = jQuery.noConflict();
myObject.ajaxcall = function(action) {
 //You function code
};
myObject.jq(document).ready(function(){
  //Your code goes here
});

这将导致以下myObject

myObject
  ajaxcall: function (action) { }
  jq: function (a,b){return new d.fn.init(a,b,g)}