1.加入我写了三个JS函数,我只想开放其中的一个给其它开发者,可以做到吗? 
  其实这一点类似java语言中的访问控制符。 
re:可以2.可否做到我定义的JS对象不能被修改?
re:可以
 
3.可否做到定义的全局变量不可修改? 
re:可以4.如何防止别人对我的写的JS函数的覆盖? 
re:没搞过5.我们使用的XMLHttpRequest对象来实现异步请求,当业务需要多个请求时, 
是否要考虑多个XMLHttpRequest实例,因为考虑到回调函数的线程安全问题? 
re:单例模式会减少内存开销,你可以看看这本书:
Ajax--Web开发、可重用组件及模式
http://www.china-pub.com/37522PS:最近在看prototype.js, 
其实这几个问题,分数肯定不止100分了,但论坛好像最高设置100分,所以还请大家帮忙,非常感谢。
re:我可以给200分:)

解决方案 »

  1.   

    不是高手,凭印象说说。写过框架,到现在还只是个框架。1.不能。js全是public。有时候我们会用下划线开头来定义一些应该是私有的变量或函数,但那仅仅是为了开发方便,或者是一种规则约定,比如function _f(){...},更约定俗成的是类似 function __f__(){...}来标识私有,但无论如何,它都是可访问的。如果采用其他的方法,比如串扰代码,或者验证constructor,但这就不是从访问控制符的角度来考虑了。2.要修改js对象和指针都是很方便的,甚至可以重写原型方法。这是js的优势之一,所以不能。3.js中基本没什么不能修改的。4.同3.js的函数和变量几乎没什么区别,就是一个标签而已。5.多xhr,要考虑浏览器访问线程数的问题。尤其是ie6.0.2800版本,让我受害不浅,超过2个xhr,常常会出现假死。建议单线程逐个访问。
      

  2.   

    to Navymk :
    我也是粗略看了一下prototype.js,才有了上述疑问,
    那么比如说igoogle中的一个一个“小工具”,如果某个开发“小工具”的人想恶作剧的话,那么他就可以搞乱igoogle的API函数库了。以前就觉得JS实在不是一个强类型语言,前年写JS还算是有一段时间,但现在感觉对JS的对象认识是太浅了
      

  3.   


    我也只算是半桶水。只提供一些参考意见。
    1. function a() {
        function b() {
            alert("b");
        }
    }我是没想到怎样在函数a外调用函数b。有高手,可指点。
        
      

  4.   

    我个人感觉前几个问题都几乎可以变向用闭包解决的.
    举个private的例子
        <script type="text/javascript">
        //<![CDATA[
          var bar = (function foo() {
    var private_var = 'never-online';
    return {
    get: function () {
    alert(private_var);
    },
    set: function (str) {
    private_var = str;
    }
    }

    })();
    bar.get();
    bar.set('BlueDestiny');
    bar.get();
    alert(bar.private_var);
        //]]>
        </script>
    最后一个,如果你要同时用XMLHttpRequest请求的线程,回调函数线程安全问题,我的理解是,以IE为例,IE XMLHttpRequest是ActiveXObject,ActiveXObject是允许多线程的,即XMLHttpRequest是多线程的,但你一旦从这个线程出来还是到了主线程里,而主线程是不允许多线程的,即IE里执行js是单线程的,也就是说,无论你有多少个请求,多少个回调,多线程无非是在XMLHttpRequest做的事,与真正的js的实现的代码无关,因此无需考虑安全问题.但是我建议不要使用多个XMLHttpRequest,如果同时要有多个,我宁愿直接输出HTML.待用户确实需要再次请求时再生成XMLHttpRequest,可以用一个XMLHttpRequestManager去管理的XMLHttpRequest,防止无用请求.
      

  5.   

    prototype的东西,我写了一点,可能会对你有用,如果写得差也不要扔鸡蛋^_^http://www.never-online.net/blog/article.asp?id=199
      

  6.   

    JavaScript是种弱语言,也显得自由,是优点也是弱点。不要拿它和Java这种语言相提并论。-- 5.我们使用的XMLHttpRequest对象来实现异步请求,当业务需要多个请求时, 
       是否要考虑多个XMLHttpRequest实例,因为考虑到回调函数的线程安全问题?它本身支持多线程的,为了加快加载速度,我们当然要考虑多个实例。回调函数的线程安全问题应该是不需要考虑的,你需要处理的是回调函数处理同一个对象时有否有冲突这个问题。
      

  7.   

    对于线程问题的担心,我是这样考虑的:
    下面的代码是保持一个XMLHttpRequest对象,但是当多个请求发送是,每个请求的返回时间是不确定的,
    当其中一个请求返回时,系统如何知道调用那一个回调函数????function getXMLHttpRequest(){
      var req;
      if (window.XMLHttpRequest) {
         req = new XMLHttpRequest();
      } else if (window.ActiveXObject) {
         req = new ActiveXObject("Microsoft.XMLHTTP");
      }
       return req;
    }var XML_HTTP_REQUEST=getXMLHttpRequest();
    function executeXhr(callback, url) {
        req = XML_HTTP_REQUEST;
        req.onreadystatechange = callback;
        req.open("GET", url, true);
        req.send(null);
    }
    function callback1(){
            //这里省略了判断请求完成的语句
    alert("this is func1");
    }function callback2(){
            //这里省略了判断请求完成的语句
    alert("this is func2");
    }
    function test(){ executeXhr(callback1,"www.google.com");
    executeXhr(callback2,"www.google.com");
    //executeXhr(callback3,"www.google.com");
    //..........................
    }