最近想详细学学JS的面向对象编程,不知道该找什么资料,看了些组件的源码也没啥感觉,就自己写了个Ajax封装玩玩。<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title>Ajax测试</title>
<script type="text/javascript">
var Extend = function(destination, source) {
for (var property in source) {
destination[property] = source[property];
} }
var Bind = function(object, fun,args) {
return function() {
return fun.apply(object,args||[]);
} }
var xmlHttp=null;
var getXmlHttpRequest=function(){
if(xmlHttp!=undefined)return xmlHttp;
var _xmlHttp;
try{_xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");}catch(e){
try{_xmlHttp=new XMLHttpRequest(); }catch(e){
try{_xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");}catch(e){
alert("您的浏览器不支持Ajax!");_xmlHttp=null;
}
}
}
xmlHttp=_xmlHttp;
return _xmlHttp;
}
/*******************************************************************************************/
var Ajax={
url : '',
parameters : '',
onSucc : '',
onFail : '',
xmlHttp : null,
request : function(options){
Extend(this,options || {});
this.xmlHttp=getXmlHttpRequest();
this.xmlHttp.open("GET", this.url, true);
this.xmlHttp.onreadystatechange = Bind(this,this.onStateChange,[this]);
this.xmlHttp.send(null);
},
onStateChange : function(){
if(this.xmlHttp.readyState==4){
if(this.xmlHttp.status>=200 && this.xmlHttp.status<300)
this.onSucc(this.xmlHttp.responseText);
else this.onFail(this.xmlHttp.status,this.xmlHttp.statusText);
}
}
}
/*******************************************************************************************/
var succ=function(data){alert(data);}
var fail=function(errType,errText){alert(errText);}
var showAjax=function(){
Ajax.request({url:'json.txt',onSucc:succ,onFail:fail});
}
</script>
</head>
<body>
<input type="button" value="Test" onclick="showAjax()" />
</body>
</html>
有用过一段时间的ext,一写就成这风格了,也不知道这算什么。
看了些组件如:prototype源码解说看操作好像很多都用new对象的方式来执行,大量的继承,都有点晕了。
在不考虑功能完善性的前提下不知道我这样写有哪些缺点?
求高手指点指点啊,顺便最好能推荐下JS面向对象的学习资料,不吝感激。
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title>Ajax测试</title>
<script type="text/javascript">
var Extend = function(destination, source) {
for (var property in source) {
destination[property] = source[property];
} }
var Bind = function(object, fun,args) {
return function() {
return fun.apply(object,args||[]);
} }
var xmlHttp=null;
var getXmlHttpRequest=function(){
if(xmlHttp!=undefined)return xmlHttp;
var _xmlHttp;
try{_xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");}catch(e){
try{_xmlHttp=new XMLHttpRequest(); }catch(e){
try{_xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");}catch(e){
alert("您的浏览器不支持Ajax!");_xmlHttp=null;
}
}
}
xmlHttp=_xmlHttp;
return _xmlHttp;
}
/*******************************************************************************************/
var Ajax={
url : '',
parameters : '',
onSucc : '',
onFail : '',
xmlHttp : null,
request : function(options){
Extend(this,options || {});
this.xmlHttp=getXmlHttpRequest();
this.xmlHttp.open("GET", this.url, true);
this.xmlHttp.onreadystatechange = Bind(this,this.onStateChange,[this]);
this.xmlHttp.send(null);
},
onStateChange : function(){
if(this.xmlHttp.readyState==4){
if(this.xmlHttp.status>=200 && this.xmlHttp.status<300)
this.onSucc(this.xmlHttp.responseText);
else this.onFail(this.xmlHttp.status,this.xmlHttp.statusText);
}
}
}
/*******************************************************************************************/
var succ=function(data){alert(data);}
var fail=function(errType,errText){alert(errText);}
var showAjax=function(){
Ajax.request({url:'json.txt',onSucc:succ,onFail:fail});
}
</script>
</head>
<body>
<input type="button" value="Test" onclick="showAjax()" />
</body>
</html>
有用过一段时间的ext,一写就成这风格了,也不知道这算什么。
看了些组件如:prototype源码解说看操作好像很多都用new对象的方式来执行,大量的继承,都有点晕了。
在不考虑功能完善性的前提下不知道我这样写有哪些缺点?
求高手指点指点啊,顺便最好能推荐下JS面向对象的学习资料,不吝感激。
for (var property in source) {
destination[property] = source[property];
} } //如果楼主看过Ext 这个和Ext.apply方法类似 都是复制对象 var Bind = function(object, fun,args) {
return function() {
return fun.apply(object,args||[]);
}
} //一个闭包 主要作用应该在于作用域的控制 但楼主下边ajax的onreadystate时 没有必要那样写this.xmlHttp.onreadystatechange = Bind(this,this.onStateChange,[this]); //直接换成this.onStateChange 就是了
extend和bind两个方法也是学来了,感觉是挺好用的。
Bind(this,this.onStateChange,[this]); 这句的话不用bind方法这样操作的话火狐下面onStateChange方法里的this就会是readyState,在ie下则是ajax对象。
<script language="JavaScript" type="text/javascript" src="jquery-1.6.4.js"></script>
<style></style>
</head>
<body><div id="rect" style="width:200px;height:200px;position:absolute;background-color:pink;"></div><div id="display" style="position:absolute;top:300px;"></div>
</body>
</html><script>$(init);function init(){
rectEvent();
}function rectEvent(){
var slider = $("#rect");
var downFlag = false;var offX;slider.mousedown(function(e){
downFlag = true;
var event = getEvent(e);
offX = getOffsetX(event);});slider.mouseup(function(){
downFlag = false;
});slider.mouseout(function(){
downFlag = false;
});slider.mousemove(function(e){
var event = getEvent(e);if(!downFlag){
return false;
}var left = event.clientX - offX;
$("#display").text(left);
slider.css("left",left);
});}
function getEvent(event){
var event = event ? event : window.event;
return event;
}function getOffsetX(event){
var off_X = event.offsetX ? event.offsetX : event.layerX;
return off_X;
}</script>如果我在rect div随便加入文本如:11,这样就可以了,我一直不太明白为什么会这样?
好人哪!我都感动了。