代码之家  ›  专栏  ›  技术社区  ›  gargantuan

如何在javascript文件中获得函数列表?

  •  3
  • gargantuan  · 技术社区  · 14 年前

    我正在尝试为javascript拼凑一个php风格的include函数。我要走的路线是通过XMLHttpRequest。将加载包含的文件,但该文件中的函数不可用,因为它们的作用域仅限于调用它们的函数。

    我遇到了 this article

    function twinkle(){
    
        getXMLHTTPObj("twinkle/test.js");
    
        // A simple function inside test.js
        includedFunc();
    
    }
    
    
    // XMLHttp Stuff lifted from he Apple tutorial
    
    var req;
    function getXMLHTTPObj(url) {
        req = false;
        // branch for native XMLHttpRequest object
        if(window.XMLHttpRequest && !(window.ActiveXObject)) {
            try {
                req = new XMLHttpRequest();
            } catch(e) {
                req = false;
            }
        // branch for IE/Windows ActiveX version
        } else if(window.ActiveXObject) {
            try {
                req = new ActiveXObject("Msxml2.XMLHTTP");
            } catch(e) {
                try {
                    req = new ActiveXObject("Microsoft.XMLHTTP");
                } catch(e) {
                    req = false;
                }
            }
        }
    
        if(req) {
            req.onreadystatechange = processReqChange;
    
                // Set to False so javascript waits for the included functions 
                // to become available 
            req.open("GET", url, false);
            req.send("");
        }
    
        return req;
    }
    
    function processReqChange() {
        // only if req shows "loaded"
        if (req.readyState == 4) {
            // only if "OK"
            if (req.status == 200) {
                eval(req.responseText);
            } else {
                alert("There was a problem retrieving the XML data:\n" +
                    req.statusText);
            }
        }
    }
    

    我正在考虑在每个包含的文件中创建一个函数索引,在包含该文件时可以对其进行迭代,但这并不是一个很好的解决方案。

    有什么想法吗?我是否可以访问一些javascript属性或函数来获取文件中的函数列表?

    4 回复  |  直到 14 年前
        1
  •  1
  •   D'Arcy Rittich    14 年前

    更改声明函数的方式,它应该可以解决范围问题。而不是:

    function add(a, b) 
    {                     
        return a + b;
    } 
    

    请执行以下操作:

    var add = function(a, b) 
    {                     
        return a + b;
    }   
    
        2
  •  1
  •   Andy E    14 年前

    使用DOM添加所需脚本非常简单:

    function include(jsFile)
    {
        var sEl  = document.createElement("script");
        sEl.type = "text/javascript";
        sEl.src  = jsFile;
        document.getElementsByTagName("head").appendChild(sEl);
    }
    

    onload 在大多数(所有?)流行浏览器中工作的事件,因此如果您愿意,还可以添加回调函数。明显的缺点是,在下载并解析文件之前,函数不会对当前脚本可用。

        3
  •  1
  •   gargantuan    14 年前

    OrbMan为我指出了正确的方向,但是这个包含Javascript文件的特殊方法的解决方案需要不同的函数定义;这样地

    window.myFunction = function(){ 
    
        alert("Hey There!") 
    
    }
    

        4
  •  0
  •   Josh Andreas Rehm    14 年前

    为什么不创建一个 <script> require 功能工程