同时也请写过JavaScript框架的高手们进来帮我解决几个疑惑

mlw2000 2008-06-10 06:36:13
1.加入我写了三个JS函数,我只想开放其中的一个给其它开发者,可以做到吗?
其实这一点类似java语言中的访问控制符。
2.可否做到我定义的JS对象不能被修改?
3.可否做到定义的全局变量不可修改?
4.如何防止别人对我的写的JS函数的覆盖?
5.我们使用的XMLHttpRequest对象来实现异步请求,当业务需要多个请求时,
是否要考虑多个XMLHttpRequest实例,因为考虑到回调函数的线程安全问题?

PS:最近在看prototype.js,
其实这几个问题,分数肯定不止100分了,但论坛好像最高设置100分,所以还请大家帮忙,非常感谢。
...全文
300 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
mlw2000 2008-06-17
  • 打赏
  • 举报
回复
虽没有得到最终答案,但也收获不少,打算自己解决这些疑问了
fffddd 2008-06-16
  • 打赏
  • 举报
回复
1234不可以。
mlw2000 2008-06-16
  • 打赏
  • 举报
回复
再顶一下,明天晚上结贴重新提问
mlw2000 2008-06-15
  • 打赏
  • 举报
回复
顶一下帖子
mlw2000 2008-06-13
  • 打赏
  • 举报
回复
对于线程问题的担心,我是这样考虑的:
下面的代码是保持一个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");
//..........................
}


mlw2000 2008-06-13
  • 打赏
  • 举报
回复
增加一下关注度
老紫竹 2008-06-13
  • 打赏
  • 举报
回复
js 运行在客户端,就算你进行了加密,也是可以.....

不过对与大多数人来说,是个好主意。
fason 2008-06-13
  • 打赏
  • 举报
回复
JavaScript是种弱语言,也显得自由,是优点也是弱点。不要拿它和Java这种语言相提并论。

-- 5.我们使用的XMLHttpRequest对象来实现异步请求,当业务需要多个请求时,
是否要考虑多个XMLHttpRequest实例,因为考虑到回调函数的线程安全问题?

它本身支持多线程的,为了加快加载速度,我们当然要考虑多个实例。回调函数的线程安全问题应该是不需要考虑的,你需要处理的是回调函数处理同一个对象时有否有冲突这个问题。
BlueDestiny 2008-06-12
  • 打赏
  • 举报
回复
prototype的东西,我写了一点,可能会对你有用,如果写得差也不要扔鸡蛋^_^

http://www.never-online.net/blog/article.asp?id=199
BlueDestiny 2008-06-12
  • 打赏
  • 举报
回复
我个人感觉前几个问题都几乎可以变向用闭包解决的.
举个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,防止无用请求.
mlw2000 2008-06-12
  • 打赏
  • 举报
回复
请大家帮忙
Navymk 2008-06-11
  • 打赏
  • 举报
回复
彼此彼此...很多问题都蒙昧中...
Kenny田 2008-06-11
  • 打赏
  • 举报
回复
帮顶, 麻烦大家帮我看看这个问题,谢谢
http://topic.csdn.net/u/20080610/19/9a2b42a9-a92e-4a0f-b25c-0b9841c1ad2b.html
mlw2000 2008-06-11
  • 打赏
  • 举报
回复
自己顶一下
jackyBody 2008-06-11
  • 打赏
  • 举报
回复
js不可能做到, js象as3就好了~
  • 打赏
  • 举报
回复
除非封装
  • 打赏
  • 举报
回复
这些东西如果不想别人修改,只好经过代码混扰得方式了
这样的话代码就比较难读
难读的话也就不好修改了

但是如果他能读懂或者还原了
一样是可以修改的
fireaap 2008-06-11
  • 打赏
  • 举报
回复
[Quote=引用楼主 mlw2000 的帖子:]
1.加入我写了三个JS函数,我只想开放其中的一个给其它开发者,可以做到吗?
其实这一点类似java语言中的访问控制符。
2.可否做到我定义的JS对象不能被修改?
3.可否做到定义的全局变量不可修改?
4.如何防止别人对我的写的JS函数的覆盖?
5.我们使用的XMLHttpRequest对象来实现异步请求,当业务需要多个请求时,
是否要考虑多个XMLHttpRequest实例,因为考虑到回调函数的线程安全问题?

PS:最近在看prototype.js,
其实…
[/Quote]

我也只算是半桶水。只提供一些参考意见。
1.
function a() {
function b() {
alert("b");
}
}


我是没想到怎样在函数a外调用函数b。有高手,可指点。


mlw2000 2008-06-10
  • 打赏
  • 举报
回复
to Navymk :
我也是粗略看了一下prototype.js,才有了上述疑问,
那么比如说igoogle中的一个一个“小工具”,如果某个开发“小工具”的人想恶作剧的话,那么他就可以搞乱igoogle的API函数库了。

以前就觉得JS实在不是一个强类型语言,前年写JS还算是有一段时间,但现在感觉对JS的对象认识是太浅了
Navymk 2008-06-10
  • 打赏
  • 举报
回复
不是高手,凭印象说说。写过框架,到现在还只是个框架。

1.不能。js全是public。有时候我们会用下划线开头来定义一些应该是私有的变量或函数,但那仅仅是为了开发方便,或者是一种规则约定,比如function _f(){...},更约定俗成的是类似 function __f__(){...}来标识私有,但无论如何,它都是可访问的。如果采用其他的方法,比如串扰代码,或者验证constructor,但这就不是从访问控制符的角度来考虑了。

2.要修改js对象和指针都是很方便的,甚至可以重写原型方法。这是js的优势之一,所以不能。

3.js中基本没什么不能修改的。

4.同3.js的函数和变量几乎没什么区别,就是一个标签而已。

5.多xhr,要考虑浏览器访问线程数的问题。尤其是ie6.0.2800版本,让我受害不浅,超过2个xhr,常常会出现假死。建议单线程逐个访问。
加载更多回复(4)

87,993

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧