面向对象的组成
[html]view plaincopy
- <!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
- <htmlxmlns="http://www.w3.org/1999/xhtml">
- <head>
- <metahttp-equiv="Content-Type"content="text/html;charset=utf-8"/>
- <title>无标题文档</title>
- <script>
- vararr=[];
- arr.number=10;//对象下面的变量:叫做对象的属性
- //alert(arr.number);
- //alert(arr.length);
- arr.test=function(){//对象下面的函数:叫做对象的方法
- alert(123);
- };
- arr.test();
- arr.push();
- arr.sort();
- </script>
- </head>
- <body>
- </body>
- </html>
创建第一个面向对象程序
[html]view plaincopy
- <!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
- <htmlxmlns="http://www.w3.org/1999/xhtml">
- <head>
- <metahttp-equiv="Content-Type"content="text/html;charset=utf-8"/>
- <title>无标题文档</title>
- <script>
- //varobj={};
- varobj=newObject();//创建了一个空的对象
- obj.name=‘小明‘;//属性
- obj.showName=function(){//方法
- alert(this.name);
- };
- obj.showName();
- varobj2=newObject();//创建了一个空的对象
- obj2.name=‘小强‘;//属性
- obj2.showName=function(){//方法
- alert(this.name);
- };
- obj2.showName();
- </script>
- </head>
- <body>
- </body>
- </html>
工厂方式
[html]view plaincopy
- <!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
- <htmlxmlns="http://www.w3.org/1999/xhtml">
- <head>
- <metahttp-equiv="Content-Type"content="text/html;charset=utf-8"/>
- <title>无标题文档</title>
- <script>
- //工厂方式:封装函数
- functioncreatePerson(name){
- //1.原料
- varobj=newObject();
- //2.加工
- obj.name=name;
- obj.showName=function(){
- alert(this.name);
- };
- //3.出场
- returnobj;
- }
- varp1=createPerson(‘小明‘);
- p1.showName();
- varp2=createPerson(‘小强‘);
- p2.showName();
- </script>
- </head>
- <body>
- </body>
- </html>
[html]view plaincopy
- <!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
- <htmlxmlns="http://www.w3.org/1999/xhtml">
- <head>
- <metahttp-equiv="Content-Type"content="text/html;charset=utf-8"/>
- <title>无标题文档</title>
- <script>
- //当new去调用一个函数:这个时候函数中的this就是创建出来的对象,而且函数的的返回值直接就是this啦(隐式返回)
- //new后面调用的函数:叫做构造函数
- functionCreatePerson(name){
- this.name=name;
- this.showName=function(){
- alert(this.name);
- };
- }
- varp1=newCreatePerson(‘小明‘);
- //p1.showName();
- varp2=newCreatePerson(‘小强‘);
- //p2.showName();
- alert(p1.showName==p2.showName);//false
- vararr=newArray();
- vardate=newDate();
- </script>
- </head>
- <body>
- </body>
- </html>
对象的引用
[html]view plaincopy
- <!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
- <htmlxmlns="http://www.w3.org/1999/xhtml">
- <head>
- <metahttp-equiv="Content-Type"content="text/html;charset=utf-8"/>
- <title>无标题文档</title>
- <script>
- /*vara=[1,2,3];
- varb=[1,2,3];
- alert(a==b);//false*/
- //vara=5;
- //varb=a;
- //b+=3;
- ////alert(b);//8
- //alert(a);//5基本类型:赋值的时候只是值的复制
- //vara=[1,2,3];
- //varb=a;
- //b.push(4);
- ////alert(b);//[1,2,3,4]
- //alert(a);//[1,2,3,4]对象类型:赋值不仅是值的复制,而且也是引用的传递
- //vara=[1,2,3];
- //varb=a;
- //b=[1,2,3,4];
- ////alert(b);//[1,2,3,4]
- //alert(a);//[1,2,3]
- //vara=5;
- //varb=5;
- //
- //alert(a==b);//基本类型:值相同就可以
- //vara=[1,2,3];
- //varb=[1,2,3];
- //alert(a==b);//false//对象类型:值和引用都相同才行
- vara=[1,2,3];
- varb=a;
- alert(a==b);//true
- </script>
- </head>
- <body>
- </body>
- </html>
原型
[html]view plaincopy
- <!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
- <htmlxmlns="http://www.w3.org/1999/xhtml">
- <head>
- <metahttp-equiv="Content-Type"content="text/html;charset=utf-8"/>
- <title>无标题文档</title>
- <script>
- //原型:去改写对象下面公用的方法或者属性,让公用的方法或者属性在内存中存在一份(提高性能)
- //原型:CSS中的class
- //普通方法:CSS中的style
- //原型:prototype:要写在构造函数的下面
- /*vararr=[1,2,3,4,5];
- vararr2=[2,2,2,2,2];
- arr.sum=function(){
- varresult=0;
- for(vari=0;i<this.length;i++){
- result+=this[i];
- }
- returnresult;
- };
- arr2.sum=function(){
- varresult=0;
- for(vari=0;i<this.length;i++){
- result+=this[i];
- }
- returnresult;
- };
- //alert(arr.sum());//15
- //alert(arr2.sum());//10*/
- vararr=[1,2,3,4,5];
- vararr2=[2,2,2,2,2];
- Array.prototype.sum=function(){
- varresult=0;
- for(vari=0;i<this.length;i++){
- result+=this[i];
- }
- returnresult;
- };
- alert(arr.sum());//15
- alert(arr2.sum());//10
- </script>
- </head>
- <body>
- </body>
- </html>
[html]view plaincopy
- <!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
- <htmlxmlns="http://www.w3.org/1999/xhtml">
- <head>
- <metahttp-equiv="Content-Type"content="text/html;charset=utf-8"/>
- <title>无标题文档</title>
- <script>
- vararr=[];
- //arr.number=10;
- Array.prototype.number=20;
- alert(arr.number);
- </script>
- </head>
- <body>
- </body>
- </html>
工厂方法之原型
[html]view plaincopy
- <!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
- <htmlxmlns="http://www.w3.org/1999/xhtml">
- <head>
- <metahttp-equiv="Content-Type"content="text/html;charset=utf-8"/>
- <title>无标题文档</title>
- <script>
- //当new去调用一个函数:这个时候函数中的this就是创建出来的对象,而且函数的的返回值直接就是this啦(隐式返回)
- //new后面调用的函数:叫做构造函数
- functionCreatePerson(name){
- this.name=name;
- }
- CreatePerson.prototype.showName=function(){
- alert(this.name);
- };
- varp1=newCreatePerson(‘小明‘);
- //p1.showName();
- varp2=newCreatePerson(‘小强‘);
- //p2.showName();
- alert(p1.showName==p2.showName);//true
- vararr=newArray();
- vardate=newDate();
- </script>
- </head>
- <body>
- </body>
- </html>
面向对象的写法
[html]view plaincopy
- <!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
- <htmlxmlns="http://www.w3.org/1999/xhtml">
- <head>
- <metahttp-equiv="Content-Type"content="text/html;charset=utf-8"/>
- <title>无标题文档</title>
- <script>
- function构造函数(){
- this.属性
- }
- 构造函数.原型.方法=function(){};
- var对象1=new构造函数();
- 对象1.方法();
- </script>
- </head>
- <body>
- </body>
- </html>
面向对象的选项卡
[html]view plaincopy
- <!DOCTYPEHTML>
- <html>
- <head>
- <metahttp-equiv="Content-Type"content="text/html;charset=utf-8">
- <title>无标题文档</title>
- <style>
- #div1div{width:200px;height:200px;border:1px#000solid;display:none;}
- .active{background:red;}
- </style>
- <script>
- /*window.onload=function(){
- varoParent=document.getElementById(‘div1‘);
- varaInput=oParent.getElementsByTagName(‘input‘);
- varaDiv=oParent.getElementsByTagName(‘div‘);
- for(vari=0;i<aInput.length;i++){
- aInput[i].index=i;
- aInput[i].onclick=function(){
- for(vari=0;i<aInput.length;i++){
- aInput[i].className=‘‘;
- aDiv[i].style.display=‘none‘;
- }
- this.className=‘active‘;
- aDiv[this.index].style.display=‘block‘;
- };
- }
- };*/
- //先变型:
- //尽量不要出现函数嵌套函数
- //可以有全局变量
- //把onload中不是赋值的语句放到单独函数中
- varoParent=null;
- varaInput=null;
- varaDiv=null;
- window.onload=function(){
- oParent=document.getElementById(‘div1‘);
- aInput=oParent.getElementsByTagName(‘input‘);
- aDiv=oParent.getElementsByTagName(‘div‘);
- init();
- };
- functioninit(){
- for(vari=0;i<aInput.length;i++){
- aInput[i].index=i;
- aInput[i].onclick=change;
- }
- }
- functionchange(){
- for(vari=0;i<aInput.length;i++){
- aInput[i].className=‘‘;
- aDiv[i].style.display=‘none‘;
- }
- this.className=‘active‘;
- aDiv[this.index].style.display=‘block‘;
- }
- </script>
- </head>
- <body>
- <div>
- <inputtype="button"value="1">
- <inputtype="button"value="2">
- <inputtype="button"value="3">
- <divstyle="display:block">11111</div>
- <div>22222</div>
- <div>33333</div>
- </div>
- </body>
- </html>
[html]view plaincopy
- <!DOCTYPEHTML>
- <html>
- <head>
- <metahttp-equiv="Content-Type"content="text/html;charset=utf-8">
- <title>无标题文档</title>
- <style>
- #div1div{width:200px;height:200px;border:1px#000solid;display:none;}
- .active{background:red;}
- </style>
- <script>
- /*window.onload=function(){
- varoParent=document.getElementById(‘div1‘);
- varaInput=oParent.getElementsByTagName(‘input‘);
- varaDiv=oParent.getElementsByTagName(‘div‘);
- for(vari=0;i<aInput.length;i++){
- aInput[i].index=i;
- aInput[i].onclick=function(){
- for(vari=0;i<aInput.length;i++){
- aInput[i].className=‘‘;
- aDiv[i].style.display=‘none‘;
- }
- this.className=‘active‘;
- aDiv[this.index].style.display=‘block‘;
- };
- }
- };*/
- //先变型:
- //尽量不要出现函数嵌套函数
- //可以有全局变量
- //把onload中不是赋值的语句放到单独函数中
- /*varoParent=null;
- varaInput=null;
- varaDiv=null;
- window.onload=function(){
- oParent=document.getElementById(‘div1‘);
- aInput=oParent.getElementsByTagName(‘input‘);
- aDiv=oParent.getElementsByTagName(‘div‘);
- init();
- };
- functioninit(){
- for(vari=0;i<aInput.length;i++){
- aInput[i].index=i;
- aInput[i].onclick=change;
- }
- }
- functionchange(){
- for(vari=0;i<aInput.length;i++){
- aInput[i].className=‘‘;
- aDiv[i].style.display=‘none‘;
- }
- this.className=‘active‘;
- aDiv[this.index].style.display=‘block‘;
- }*/
- //改成面向对象:
- //全局变量就是属性
- //函数就是方法
- //Onload中创建对象
- //改this指向问题:事件或者是定时器,尽量让面向对象中的this指向对象
- window.onload=function(){
- vart1=newTab();
- t1.init();
- };
- functionTab(){
- this.oParent=document.getElementById(‘div1‘);
- this.aInput=this.oParent.getElementsByTagName(‘input‘);
- this.aDiv=this.oParent.getElementsByTagName(‘div‘);
- }
- Tab.prototype.init=function(){
- varThis=this;
- for(vari=0;i<this.aInput.length;i++){
- this.aInput[i].index=i;
- this.aInput[i].onclick=function(){
- This.change(this);
- };
- }
- };
- Tab.prototype.change=function(obj){ <