分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > IT知识

js面向对象高级编程

发布时间:2023-09-06 01:17责任编辑:苏小强关键词:js面向对象

面向对象的组成

[html]view plaincopy
  1. <!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <htmlxmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4. <metahttp-equiv="Content-Type"content="text/html;charset=utf-8"/>
  5. <title>无标题文档</title>
  6. <script>
  7. vararr=[];
  8. arr.number=10;//对象下面的变量:叫做对象的属性
  9. //alert(arr.number);
  10. //alert(arr.length);
  11. arr.test=function(){//对象下面的函数:叫做对象的方法
  12. alert(123);
  13. };
  14. arr.test();
  15. arr.push();
  16. arr.sort();
  17. </script>
  18. </head>
  19. <body>
  20. </body>
  21. </html>


创建第一个面向对象程序

[html]view plaincopy
  1. <!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <htmlxmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4. <metahttp-equiv="Content-Type"content="text/html;charset=utf-8"/>
  5. <title>无标题文档</title>
  6. <script>
  7. //varobj={};
  8. varobj=newObject();//创建了一个空的对象
  9. obj.name=‘小明‘;//属性
  10. obj.showName=function(){//方法
  11. alert(this.name);
  12. };
  13. obj.showName();
  14. varobj2=newObject();//创建了一个空的对象
  15. obj2.name=‘小强‘;//属性
  16. obj2.showName=function(){//方法
  17. alert(this.name);
  18. };
  19. obj2.showName();
  20. </script>
  21. </head>
  22. <body>
  23. </body>
  24. </html>


工厂方式

[html]view plaincopy
  1. <!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <htmlxmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4. <metahttp-equiv="Content-Type"content="text/html;charset=utf-8"/>
  5. <title>无标题文档</title>
  6. <script>
  7. //工厂方式:封装函数
  8. functioncreatePerson(name){
  9. //1.原料
  10. varobj=newObject();
  11. //2.加工
  12. obj.name=name;
  13. obj.showName=function(){
  14. alert(this.name);
  15. };
  16. //3.出场
  17. returnobj;
  18. }
  19. varp1=createPerson(‘小明‘);
  20. p1.showName();
  21. varp2=createPerson(‘小强‘);
  22. p2.showName();
  23. </script>
  24. </head>
  25. <body>
  26. </body>
  27. </html>
[html]view plaincopy
  1. <!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <htmlxmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4. <metahttp-equiv="Content-Type"content="text/html;charset=utf-8"/>
  5. <title>无标题文档</title>
  6. <script>
  7. //当new去调用一个函数:这个时候函数中的this就是创建出来的对象,而且函数的的返回值直接就是this啦(隐式返回)
  8. //new后面调用的函数:叫做构造函数
  9. functionCreatePerson(name){
  10. this.name=name;
  11. this.showName=function(){
  12. alert(this.name);
  13. };
  14. }
  15. varp1=newCreatePerson(‘小明‘);
  16. //p1.showName();
  17. varp2=newCreatePerson(‘小强‘);
  18. //p2.showName();
  19. alert(p1.showName==p2.showName);//false
  20. vararr=newArray();
  21. vardate=newDate();
  22. </script>
  23. </head>
  24. <body>
  25. </body>
  26. </html>

对象的引用

[html]view plaincopy
  1. <!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <htmlxmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4. <metahttp-equiv="Content-Type"content="text/html;charset=utf-8"/>
  5. <title>无标题文档</title>
  6. <script>
  7. /*vara=[1,2,3];
  8. varb=[1,2,3];
  9. alert(a==b);//false*/
  10. //vara=5;
  11. //varb=a;
  12. //b+=3;
  13. ////alert(b);//8
  14. //alert(a);//5基本类型:赋值的时候只是值的复制
  15. //vara=[1,2,3];
  16. //varb=a;
  17. //b.push(4);
  18. ////alert(b);//[1,2,3,4]
  19. //alert(a);//[1,2,3,4]对象类型:赋值不仅是值的复制,而且也是引用的传递
  20. //vara=[1,2,3];
  21. //varb=a;
  22. //b=[1,2,3,4];
  23. ////alert(b);//[1,2,3,4]
  24. //alert(a);//[1,2,3]
  25. //vara=5;
  26. //varb=5;
  27. //
  28. //alert(a==b);//基本类型:值相同就可以
  29. //vara=[1,2,3];
  30. //varb=[1,2,3];
  31. //alert(a==b);//false//对象类型:值和引用都相同才行
  32. vara=[1,2,3];
  33. varb=a;
  34. alert(a==b);//true
  35. </script>
  36. </head>
  37. <body>
  38. </body>
  39. </html>


原型

[html]view plaincopy
  1. <!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <htmlxmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4. <metahttp-equiv="Content-Type"content="text/html;charset=utf-8"/>
  5. <title>无标题文档</title>
  6. <script>
  7. //原型:去改写对象下面公用的方法或者属性,让公用的方法或者属性在内存中存在一份(提高性能)
  8. //原型:CSS中的class
  9. //普通方法:CSS中的style
  10. //原型:prototype:要写在构造函数的下面
  11. /*vararr=[1,2,3,4,5];
  12. vararr2=[2,2,2,2,2];
  13. arr.sum=function(){
  14. varresult=0;
  15. for(vari=0;i<this.length;i++){
  16. result+=this[i];
  17. }
  18. returnresult;
  19. };
  20. arr2.sum=function(){
  21. varresult=0;
  22. for(vari=0;i<this.length;i++){
  23. result+=this[i];
  24. }
  25. returnresult;
  26. };
  27. //alert(arr.sum());//15
  28. //alert(arr2.sum());//10*/
  29. vararr=[1,2,3,4,5];
  30. vararr2=[2,2,2,2,2];
  31. Array.prototype.sum=function(){
  32. varresult=0;
  33. for(vari=0;i<this.length;i++){
  34. result+=this[i];
  35. }
  36. returnresult;
  37. };
  38. alert(arr.sum());//15
  39. alert(arr2.sum());//10
  40. </script>
  41. </head>
  42. <body>
  43. </body>
  44. </html>
[html]view plaincopy
  1. <!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <htmlxmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4. <metahttp-equiv="Content-Type"content="text/html;charset=utf-8"/>
  5. <title>无标题文档</title>
  6. <script>
  7. vararr=[];
  8. //arr.number=10;
  9. Array.prototype.number=20;
  10. alert(arr.number);
  11. </script>
  12. </head>
  13. <body>
  14. </body>
  15. </html>


工厂方法之原型

[html]view plaincopy
  1. <!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <htmlxmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4. <metahttp-equiv="Content-Type"content="text/html;charset=utf-8"/>
  5. <title>无标题文档</title>
  6. <script>
  7. //当new去调用一个函数:这个时候函数中的this就是创建出来的对象,而且函数的的返回值直接就是this啦(隐式返回)
  8. //new后面调用的函数:叫做构造函数
  9. functionCreatePerson(name){
  10. this.name=name;
  11. }
  12. CreatePerson.prototype.showName=function(){
  13. alert(this.name);
  14. };
  15. varp1=newCreatePerson(‘小明‘);
  16. //p1.showName();
  17. varp2=newCreatePerson(‘小强‘);
  18. //p2.showName();
  19. alert(p1.showName==p2.showName);//true
  20. vararr=newArray();
  21. vardate=newDate();
  22. </script>
  23. </head>
  24. <body>
  25. </body>
  26. </html>


面向对象的写法

[html]view plaincopy
  1. <!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <htmlxmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4. <metahttp-equiv="Content-Type"content="text/html;charset=utf-8"/>
  5. <title>无标题文档</title>
  6. <script>
  7. function构造函数(){
  8. this.属性
  9. }
  10. 构造函数.原型.方法=function(){};
  11. var对象1=new构造函数();
  12. 对象1.方法();
  13. </script>
  14. </head>
  15. <body>
  16. </body>
  17. </html>


面向对象的选项卡

[html]view plaincopy
  1. <!DOCTYPEHTML>
  2. <html>
  3. <head>
  4. <metahttp-equiv="Content-Type"content="text/html;charset=utf-8">
  5. <title>无标题文档</title>
  6. <style>
  7. #div1div{width:200px;height:200px;border:1px#000solid;display:none;}
  8. .active{background:red;}
  9. </style>
  10. <script>
  11. /*window.onload=function(){
  12. varoParent=document.getElementById(‘div1‘);
  13. varaInput=oParent.getElementsByTagName(‘input‘);
  14. varaDiv=oParent.getElementsByTagName(‘div‘);
  15. for(vari=0;i<aInput.length;i++){
  16. aInput[i].index=i;
  17. aInput[i].onclick=function(){
  18. for(vari=0;i<aInput.length;i++){
  19. aInput[i].className=‘‘;
  20. aDiv[i].style.display=‘none‘;
  21. }
  22. this.className=‘active‘;
  23. aDiv[this.index].style.display=‘block‘;
  24. };
  25. }
  26. };*/
  27. //先变型:
  28. //尽量不要出现函数嵌套函数
  29. //可以有全局变量
  30. //把onload中不是赋值的语句放到单独函数中
  31. varoParent=null;
  32. varaInput=null;
  33. varaDiv=null;
  34. window.onload=function(){
  35. oParent=document.getElementById(‘div1‘);
  36. aInput=oParent.getElementsByTagName(‘input‘);
  37. aDiv=oParent.getElementsByTagName(‘div‘);
  38. init();
  39. };
  40. functioninit(){
  41. for(vari=0;i<aInput.length;i++){
  42. aInput[i].index=i;
  43. aInput[i].onclick=change;
  44. }
  45. }
  46. functionchange(){
  47. for(vari=0;i<aInput.length;i++){
  48. aInput[i].className=‘‘;
  49. aDiv[i].style.display=‘none‘;
  50. }
  51. this.className=‘active‘;
  52. aDiv[this.index].style.display=‘block‘;
  53. }
  54. </script>
  55. </head>
  56. <body>
  57. <div>
  58. <inputtype="button"value="1">
  59. <inputtype="button"value="2">
  60. <inputtype="button"value="3">
  61. <divstyle="display:block">11111</div>
  62. <div>22222</div>
  63. <div>33333</div>
  64. </div>
  65. </body>
  66. </html>
[html]view plaincopy
  1. <!DOCTYPEHTML>
  2. <html>
  3. <head>
  4. <metahttp-equiv="Content-Type"content="text/html;charset=utf-8">
  5. <title>无标题文档</title>
  6. <style>
  7. #div1div{width:200px;height:200px;border:1px#000solid;display:none;}
  8. .active{background:red;}
  9. </style>
  10. <script>
  11. /*window.onload=function(){
  12. varoParent=document.getElementById(‘div1‘);
  13. varaInput=oParent.getElementsByTagName(‘input‘);
  14. varaDiv=oParent.getElementsByTagName(‘div‘);
  15. for(vari=0;i<aInput.length;i++){
  16. aInput[i].index=i;
  17. aInput[i].onclick=function(){
  18. for(vari=0;i<aInput.length;i++){
  19. aInput[i].className=‘‘;
  20. aDiv[i].style.display=‘none‘;
  21. }
  22. this.className=‘active‘;
  23. aDiv[this.index].style.display=‘block‘;
  24. };
  25. }
  26. };*/
  27. //先变型:
  28. //尽量不要出现函数嵌套函数
  29. //可以有全局变量
  30. //把onload中不是赋值的语句放到单独函数中
  31. /*varoParent=null;
  32. varaInput=null;
  33. varaDiv=null;
  34. window.onload=function(){
  35. oParent=document.getElementById(‘div1‘);
  36. aInput=oParent.getElementsByTagName(‘input‘);
  37. aDiv=oParent.getElementsByTagName(‘div‘);
  38. init();
  39. };
  40. functioninit(){
  41. for(vari=0;i<aInput.length;i++){
  42. aInput[i].index=i;
  43. aInput[i].onclick=change;
  44. }
  45. }
  46. functionchange(){
  47. for(vari=0;i<aInput.length;i++){
  48. aInput[i].className=‘‘;
  49. aDiv[i].style.display=‘none‘;
  50. }
  51. this.className=‘active‘;
  52. aDiv[this.index].style.display=‘block‘;
  53. }*/
  54. //改成面向对象:
  55. //全局变量就是属性
  56. //函数就是方法
  57. //Onload中创建对象
  58. //改this指向问题:事件或者是定时器,尽量让面向对象中的this指向对象
  59. window.onload=function(){
  60. vart1=newTab();
  61. t1.init();
  62. };
  63. functionTab(){
  64. this.oParent=document.getElementById(‘div1‘);
  65. this.aInput=this.oParent.getElementsByTagName(‘input‘);
  66. this.aDiv=this.oParent.getElementsByTagName(‘div‘);
  67. }
  68. Tab.prototype.init=function(){
  69. varThis=this;
  70. for(vari=0;i<this.aInput.length;i++){
  71. this.aInput[i].index=i;
  72. this.aInput[i].onclick=function(){
  73. This.change(this);
  74. };
  75. }
  76. };
  77. Tab.prototype.change=function(obj){
  78. <
我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved