读书人

jquery代码的几个疑问,该怎么处理

发布时间: 2012-03-27 13:44:24 作者: rapoo

jquery代码的几个疑问
1. if(typeof window.jQuery == "undefined ") {
window.undefined = window.undefined;

这句是起什么作用?

2. if ( !window.XMLHttpRequest )
XMLHttpRequest = function(){
return new ActiveXObject( "Microsoft.XMLHTTP ");
};
var xml = new XMLHttpRequest();
XMLHttpRequest这里应该是一个函数
var xml = XMLHttpRequest()就可以, new 一下也能得到结果.
两者有什么区别?



[解决办法]
四星的问题. 关注. 有压力.
[解决办法]
关注
[解决办法]
这两个问题是很怪,感觉第二个问题,或许是为了以后扩展用的吧,不过写成函数和函数对象定义两种方法确实是有些区别的,比如下面的例子
<script language=javascript>
function 天外水火()
{
alert( "学习 ")
}
var 天外水火TEMP = 天外水火;
/*
function 天外水火(){
天外水火TEMP();
alert( "再学习 ");
}
*/
天外水火 = function(){
天外水火TEMP();
alert( "再学习 ");
}
天外水火()
</script>
[解决办法]
四星上将?
[解决办法]
我上面的帖子有些跑题,怪我,不过也许可以从里面得到一些启示。
这两种是不一样的呀,估计new f()返回的是function对象,并非马上执行,而是直接调用则执行了,可以看看下面的
<script language=javascript>
var f = function(){
this.c = 123;
return this;
}
alert(f().constructor)
alert(new f().constructor)
alert(f()===new f())
</script>
[解决办法]
靠,我的思路又错了
[解决办法]
1. if(typeof window.jQuery == "undefined ") {
window.undefined = window.undefined;

这句是起什么作用?
------------------------------------------
window.undefined=window.undefined;
是为window声明一个undefined的属性

当访问windows.undefined的时候window对象找不到以 "undefined "命名的属性或者全局变量
系统会返回一个 undefined数据类型的值,这个访问是安全的,你可以试一下
alert(window.a)会显示undefined,
这样也就间接的给window对象声明了一个名为undefined的属性
以后就可以使用window.undefined这个属性了

有的浏览器没有undefined这个属性,但是都对于一个没有声明的对象,typeof这个对象返回的都是字符串 "undefined "

这样做的目的只是为了给window对象增加undefined这个属性,以后可以直接使用
if(a==undefined)判断,而不用再if(typeof a == "undefined ")判断
[解决办法]
整理了下思路,我这边现在的进展只是知道这两种是有区别的
<script language=javascript>
var f = function(){
alert( "asdasd ")
for( var i in this)
{
document.write(i+ " <br> ")
}
}
//alert(f())
alert(new f().constructor)
</script>

[解决办法]
第二个问题很显然
var xml = XMLHttpRequest();
xml得到的是 ActiveXObject实例

var xml = new XMLHttpRequest();
xml得到的是 XMLHttpRequest实例

根据个人需要来获取不同的对象就是了

个人愚见,不对之足请指正
[解决办法]
把XMLHttpRequest声明为一个类可以扩展其他属性或方法
可能这就是作者的用意
[解决办法]
真的看不出这样有什么好处, 或者作者是为了凸出oop的应用
------解决方案--------------------


呵呵,看来还是要相信第一感觉
[解决办法]
查了一下资料,关于第一个window.undefined问题,果然最主要的原因和LEO兄弟的差不多,把资料提出贴出来了,估计现在用的机会不象以前那么多了(因为IE5已经很少了),英文原文在下面,翻译过来差不多就是说
在IE5里不可以a= "undefined "而需要用typeof a == 'undefined '来判断,而使用了这个,就可以把typeof那句取掉,而使用一次比较操作,不需要额外的操作


compare if a variable is equal to undefined using the typeof unary operator, because if you, someday, dicide to get these things work on IE 5, you can not compare to the undefined constant (?), after all, it doesn 't exist on IE 5.0. Compare like this one:
if(b || typeof b == 'undefined ') { ...

No need to go to the extra work. jquery.js begins with this:

window.undefined = window.undefined;

So "undefined " exists in every browser. This is a handy line of code to put
in any JavaScript - it 's completely compatible with both old and new
browsers.



[解决办法]
学习```
[解决办法]
早上你问我的时候,我也试验过window.undefined那句,疑问跟你一样,哈哈

XMLHttpRequest.prototype.....

估计是这个意思,太牛了。。。。。
[解决办法]
<script language=javascript>
function a()
{
this.Action = "functiontext ";
return 1;
}
var b = a();
var c = new a();
//if(b==c)
{
alert(b.Action); //undefine
alert(c.Action); //functiontext
}
alert(b); //1
alert(c); //[object Object]
</script>

呵呵,不错。。

[解决办法]
好问题,看完之后,受益匪浅啊......
[解决办法]
var x=new XMLHttpRequest();

应该没有那么复杂,最直接的就是使IE兼容的XMLhttpRequest的使用方法与其它的浏览的接口一致。
[解决办法]
我的代码解决这个问题

function convertToDecimal(){
$.ajax({
type: "GET ",
url: "/ch03-CharacterDecoder/response ",
data: "key= " + $( "#key ").val(),
dataType: "html ",
success: function(xml){
//alert( "keypress code: " + $( "key ",xml).text() );
/*
var decimal = document.getElementById( 'decimal ');
decimal.value = $( "key ",xml).text();
//等价于上面的代码。
$( "#decimal ").val($( "key ",xml).text());
*/
$( "#decimal ").val($( "key ",xml).text());

$( "#rating ").html( "按键代码: " + $( "key ",xml).text());
}
})
clear();
}

function clear(){
var key = document.getElementById( "key ");

key.value= " ";
// alert( "keypress code: " + $(this).html() );
}
全部源代码在下面的链接
http://blog.csdn.net/zhngling/archive/2007/03/20/1535125.aspx



[解决办法]
一个 function 在作为类来使用时,它里面的 return 值会作为 new 的句柄:
function a(){this.name= "class a ";}
function b(){this.name= "class b "; this.id= "bbb "; return new a();}

var c = new b();
alert(c.name)
alert(c.id)

通过这个例子可以看到, new b() 的结果跟 b 这个 class 一点关系都没有,已经被 return 偷梁换柱了。

读书人网 >JavaScript

热点推荐