js面向对象高级编程

面向对象的组成

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  5. <title>无标题文档</title>
  6. <script>
  7. var arr = [];
  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>

创建第一个面向对象程序

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  5. <title>无标题文档</title>
  6. <script>
  7. //var obj = {};
  8. var obj = new Object();  //创建了一个空的对象
  9. obj.name = '小明';  //属性
  10. obj.showName = function(){  //方法
  11. alert(this.name);
  12. };
  13. obj.showName();
  14. var obj2 = new Object();  //创建了一个空的对象
  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>

工厂方式

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  5. <title>无标题文档</title>
  6. <script>
  7. //工厂方式 : 封装函数
  8. function createPerson(name){
  9. //1.原料
  10. var obj = new Object();
  11. //2.加工
  12. obj.name = name;
  13. obj.showName = function(){
  14. alert( this.name );
  15. };
  16. //3.出场
  17. return obj;
  18. }
  19. var p1 = createPerson('小明');
  20. p1.showName();
  21. var p2 = createPerson('小强');
  22. p2.showName();
  23. </script>
  24. </head>
  25. <body>
  26. </body>
  27. </html>
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  5. <title>无标题文档</title>
  6. <script>
  7. //当new去调用一个函数 : 这个时候函数中的this就是创建出来的对象,而且函数的的返回值直接就是this啦(隐式返回)
  8. //new后面调用的函数 : 叫做构造函数
  9. function CreatePerson(name){
  10. this.name = name;
  11. this.showName = function(){
  12. alert( this.name );
  13. };
  14. }
  15. var p1 = new CreatePerson('小明');
  16. //p1.showName();
  17. var p2 = new CreatePerson('小强');
  18. //p2.showName();
  19. alert( p1.showName == p2.showName );  //false
  20. var arr = new Array();
  21. var date = new Date();
  22. </script>
  23. </head>
  24. <body>
  25. </body>
  26. </html>

对象的引用

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

原型

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

工厂方法之原型

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

面向对象的写法

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4. <meta http-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>

面向对象的选项卡

  1. <!DOCTYPE HTML>
  2. <html>
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  5. <title>无标题文档</title>
  6. <style>
  7. #div1 div{ width:200px; height:200px; border:1px #000 solid; display:none;}
  8. .active{ background:red;}
  9. </style>
  10. <script>
  11. /*window.onload = function(){
  12. var oParent = document.getElementById('div1');
  13. var aInput = oParent.getElementsByTagName('input');
  14. var aDiv = oParent.getElementsByTagName('div');
  15. for(var i=0;i<aInput.length;i++){
  16. aInput[i].index = i;
  17. aInput[i].onclick = function(){
  18. for(var i=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. var oParent = null;
  32. var aInput = null;
  33. var aDiv = null;
  34. window.onload = function(){
  35. oParent = document.getElementById('div1');
  36. aInput = oParent.getElementsByTagName('input');
  37. aDiv = oParent.getElementsByTagName('div');
  38. init();
  39. };
  40. function init(){
  41. for(var i=0;i<aInput.length;i++){
  42. aInput[i].index = i;
  43. aInput[i].onclick = change;
  44. }
  45. }
  46. function change(){
  47. for(var i=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 id="div1">
  58. <input class="active" type="button" value="1">
  59. <input type="button" value="2">
  60. <input type="button" value="3">
  61. <div style="display:block">11111</div>
  62. <div>22222</div>
  63. <div>33333</div>
  64. </div>
  65. </body>
  66. </html>
  1. <!DOCTYPE HTML>
  2. <html>
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  5. <title>无标题文档</title>
  6. <style>
  7. #div1 div{ width:200px; height:200px; border:1px #000 solid; display:none;}
  8. .active{ background:red;}
  9. </style>
  10. <script>
  11. /*window.onload = function(){
  12. var oParent = document.getElementById('div1');
  13. var aInput = oParent.getElementsByTagName('input');
  14. var aDiv = oParent.getElementsByTagName('div');
  15. for(var i=0;i<aInput.length;i++){
  16. aInput[i].index = i;
  17. aInput[i].onclick = function(){
  18. for(var i=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. /*var oParent = null;
  32. var aInput = null;
  33. var aDiv = null;
  34. window.onload = function(){
  35. oParent = document.getElementById('div1');
  36. aInput = oParent.getElementsByTagName('input');
  37. aDiv = oParent.getElementsByTagName('div');
  38. init();
  39. };
  40. function init(){
  41. for(var i=0;i<aInput.length;i++){
  42. aInput[i].index = i;
  43. aInput[i].onclick = change;
  44. }
  45. }
  46. function change(){
  47. for(var i=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. var t1 = new Tab();
  61. t1.init();
  62. };
  63. function Tab(){
  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. var This = this;
  70. for(var i=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. for(var i=0;i<this.aInput.length;i++){
  79. this.aInput[i].className = '';
  80. this.aDiv[i].style.display = 'none';
  81. }
  82. obj.className = 'active';
  83. this.aDiv[obj.index].style.display = 'block';
  84. };
  85. </script>
  86. </head>
  87. <body>
  88. <div id="div1">
  89. <input class="active" type="button" value="1">
  90. <input type="button" value="2">
  91. <input type="button" value="3">
  92. <div style="display:block">11111</div>
  93. <div>22222</div>
  94. <div>33333</div>
  95. </div>
  96. </body>
  97. </html>
  1. <!DOCTYPE HTML>
  2. <html>
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  5. <title>无标题文档</title>
  6. <style>
  7. #div1 div,#div2 div{ width:200px; height:200px; border:1px #000 solid; display:none;}
  8. .active{ background:red;}
  9. </style>
  10. <script>
  11. /*var arr = [4,7,1,3];
  12. arr.sort();  // 1 3 4 7
  13. var arr2 = [4,7,1,3];
  14. arr2.push(5);
  15. arr2.sort(); // 1 3 4 5 7
  16. */
  17. window.onload = function(){
  18. var t1 = new Tab('div1');
  19. t1.init();
  20. t1.autoPlay();
  21. var t2 = new Tab('div2');
  22. t2.init();
  23. t2.autoPlay();
  24. };
  25. function Tab(id){
  26. this.oParent = document.getElementById(id);
  27. this.aInput = this.oParent.getElementsByTagName('input');
  28. this.aDiv = this.oParent.getElementsByTagName('div');
  29. this.iNow = 0;
  30. }
  31. Tab.prototype.init = function(){
  32. var This = this;
  33. for(var i=0;i<this.aInput.length;i++){
  34. this.aInput[i].index = i;
  35. this.aInput[i].onclick = function(){
  36. This.change(this);
  37. };
  38. }
  39. };
  40. Tab.prototype.change = function(obj){
  41. for(var i=0;i<this.aInput.length;i++){
  42. this.aInput[i].className = '';
  43. this.aDiv[i].style.display = 'none';
  44. }
  45. obj.className = 'active';
  46. this.aDiv[obj.index].style.display = 'block';
  47. };
  48. Tab.prototype.autoPlay = function(){
  49. var This = this;
  50. setInterval(function(){
  51. if(This.iNow == This.aInput.length-1){
  52. This.iNow = 0;
  53. }
  54. else{
  55. This.iNow++;
  56. }
  57. for(var i=0;i<This.aInput.length;i++){
  58. This.aInput[i].className = '';
  59. This.aDiv[i].style.display = 'none';
  60. }
  61. This.aInput[This.iNow].className = 'active';
  62. This.aDiv[This.iNow].style.display = 'block';
  63. },2000);
  64. };
  65. </script>
  66. </head>
  67. <body>
  68. <div id="div1">
  69. <input class="active" type="button" value="1">
  70. <input type="button" value="2">
  71. <input type="button" value="3">
  72. <div style="display:block">11111</div>
  73. <div>22222</div>
  74. <div>33333</div>
  75. </div>
  76. <div id="div2">
  77. <input class="active" type="button" value="1">
  78. <input type="button" value="2">
  79. <input type="button" value="3">
  80. <div style="display:block">11111</div>
  81. <div>22222</div>
  82. <div>33333</div>
  83. </div>
  84. </body>
  85. </html>

面向对象的拖拽

  1. <!DOCTYPE HTML>
  2. <html>
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  5. <title>无标题文档</title>
  6. <style>
  7. #div1 div,#div2 div{ width:200px; height:200px; border:1px #000 solid; display:none;}
  8. .active{ background:red;}
  9. </style>
  10. <script>
  11. /*var arr = [4,7,1,3];
  12. arr.sort();  // 1 3 4 7
  13. var arr2 = [4,7,1,3];
  14. arr2.push(5);
  15. arr2.sort(); // 1 3 4 5 7
  16. */
  17. window.onload = function(){
  18. var t1 = new Tab('div1');
  19. t1.init();
  20. t1.autoPlay();
  21. var t2 = new Tab('div2');
  22. t2.init();
  23. t2.autoPlay();
  24. };
  25. function Tab(id){
  26. this.oParent = document.getElementById(id);
  27. this.aInput = this.oParent.getElementsByTagName('input');
  28. this.aDiv = this.oParent.getElementsByTagName('div');
  29. this.iNow = 0;
  30. }
  31. Tab.prototype.init = function(){
  32. var This = this;
  33. for(var i=0;i<this.aInput.length;i++){
  34. this.aInput[i].index = i;
  35. this.aInput[i].onclick = function(){
  36. This.change(this);
  37. };
  38. }
  39. };
  40. Tab.prototype.change = function(obj){
  41. for(var i=0;i<this.aInput.length;i++){
  42. this.aInput[i].className = '';
  43. this.aDiv[i].style.display = 'none';
  44. }
  45. obj.className = 'active';
  46. this.aDiv[obj.index].style.display = 'block';
  47. };
  48. Tab.prototype.autoPlay = function(){
  49. var This = this;
  50. setInterval(function(){
  51. if(This.iNow == This.aInput.length-1){
  52. This.iNow = 0;
  53. }
  54. else{
  55. This.iNow++;
  56. }
  57. for(var i=0;i<This.aInput.length;i++){
  58. This.aInput[i].className = '';
  59. This.aDiv[i].style.display = 'none';
  60. }
  61. This.aInput[This.iNow].className = 'active';
  62. This.aDiv[This.iNow].style.display = 'block';
  63. },2000);
  64. };
  65. </script>
  66. </head>
  67. <body>
  68. <div id="div1">
  69. <input class="active" type="button" value="1">
  70. <input type="button" value="2">
  71. <input type="button" value="3">
  72. <div style="display:block">11111</div>
  73. <div>22222</div>
  74. <div>33333</div>
  75. </div>
  76. <div id="div2">
  77. <input class="active" type="button" value="1">
  78. <input type="button" value="2">
  79. <input type="button" value="3">
  80. <div style="display:block">11111</div>
  81. <div>22222</div>
  82. <div>33333</div>
  83. </div>
  84. </body>
  85. </html>

包装对象

  1. <!DOCTYPE HTML>
  2. <html>
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  5. <title>无标题文档</title>
  6. <script>
  7. /*function Aaa(){
  8. this.name = '小明';
  9. }
  10. Aaa.prototype.showName = function(){
  11. alert( this.name );
  12. };
  13. var a1 = new Aaa();
  14. a1.showName();
  15. var arr = new Array();
  16. arr.push();
  17. arr.sort();
  18. //在JS源码 : 系统对象也是基于原型的程序
  19. function Array(){
  20. this.lenglth = 0;
  21. }
  22. Array.prototype.push = function(){};
  23. Array.prototype.sort = function(){};*/
  24. //尽量不要去修改或者添加系统对象下面的方法和属性
  25. var arr = [1,2,3];
  26. Array.prototype.push = function(){
  27. //this : 1,2,3
  28. //arguments : 4,5,6
  29. for(var i=0;i<arguments.length;i++){
  30. this[this.length] = arguments[i]
  31. }
  32. return this.length;
  33. };
  34. arr.push(4,5,6);
  35. alert( arr );
  36. //pop shift unshift splice sort
  37. </script>
  38. </head>
  39. <body>
  40. </body>
  41. </html>
  1. <!DOCTYPE HTML>
  2. <html>
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  5. <title>无标题文档</title>
  6. <script>
  7. /*var str = 'hello';
  8. alert( typeof str );
  9. str.charAt(0);
  10. str.indexOf('e');*/
  11. //null undefined
  12. //包装对象 : 基本类型都有自己对应的包装对象 : String  Number  Boolean
  13. /*var str = new String('hello');
  14. //alert( typeof str );
  15. alert(str.charAt(1));
  16. String.prototype.charAt = function(){};*/
  17. //var str = 'hello';
  18. //str.charAt(0);  //基本类型会找到对应的包装对象类型,然后包装对象把所有的属性和方法给了基本类型,然后包装对象消失
  19. /*var str = 'hello';
  20. String.prototype.lastValue = function(){
  21. return this.charAt(this.length-1);
  22. };
  23. alert( str.lastValue() );  //o*/
  24. var str = 'hello';
  25. str.number = 10;
  26. alert( str.number );  //undefined
  27. </script>
  28. </head>
  29. <body>
  30. </body>
  31. </html>

原型链

  1. <!DOCTYPE HTML>
  2. <html>
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  5. <title>无标题文档</title>
  6. <script>
  7. //原型链 : 实例对象与原型之间的连接,叫做原型链
  8. //原型链的最外层 : Object.prototype
  9. function Aaa(){
  10. //this.num = 20;
  11. }
  12. //Aaa.prototype.num = 10;
  13. Object.prototype.num = 30;
  14. var a1 = new Aaa();
  15. alert(a1.num);
  16. </script>
  17. </head>
  18. <body>
  19. </body>
  20. </html>

hasOwnProperty

  1. <!DOCTYPE HTML>
  2. <html>
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  5. <title>无标题文档</title>
  6. <script>
  7. //hasOwnProperty : 看是不是对象自身下面的属性
  8. var arr = [];
  9. arr.num = 10;
  10. Array.prototype.num2 = 20;
  11. //alert(  arr.hasOwnProperty('num')  );  //true
  12. alert(  arr.hasOwnProperty('num2')  );  //false
  13. </script>
  14. </head>
  15. <body>
  16. </body>
  17. </html>

constructor

  1. <!DOCTYPE HTML>
  2. <html>
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  5. <title>无标题文档</title>
  6. <script>
  7. //constructor : 查看对象的构造函数
  8. /*function Aaa(){
  9. }
  10. var a1 = new Aaa();
  11. alert( a1.constructor );  //Aaa
  12. var arr = [];
  13. alert( arr.constructor == Array );  //true*/
  14. /*function Aaa(){
  15. }
  16. //Aaa.prototype.constructor = Aaa;   //每一个函数都会有的,都是自动生成的
  17. //Aaa.prototype.constructor = Array;
  18. var a1 = new Aaa();
  19. alert( a1.hasOwnProperty == Object.prototype.hasOwnProperty );  //true*/
  20. /*function Aaa(){
  21. }
  22. Aaa.prototype.name = '小明';
  23. Aaa.prototype.age = 20;
  24. Aaa.prototype = {
  25. constructor : Aaa,
  26. name : '小明',
  27. age : 20
  28. };
  29. var a1 = new Aaa();
  30. alert( a1.constructor );*/
  31. function Aaa(){
  32. }
  33. Aaa.prototype.name = 10;
  34. Aaa.prototype.constructor = Aaa;
  35. for( var attr in Aaa.prototype ){
  36. alert(attr);
  37. }
  38. </script>
  39. </head>
  40. <body>
  41. </body>
  42. </html>

instanceof

  1. <!DOCTYPE HTML>
  2. <html>
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  5. <title>无标题文档</title>
  6. <script>
  7. //instanceof : 对象与构造函数在原型链上是否有关系
  8. function Aaa(){
  9. }
  10. var a1 = new Aaa();
  11. //alert( a1 instanceof Object );  //true
  12. var arr = [];
  13. alert( arr instanceof Array );
  14. </script>
  15. </head>
  16. <body>
  17. </body>
  18. </html>

toString

  1. <!DOCTYPE HTML>
  2. <html>
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  5. <title>无标题文档</title>
  6. <script>
  7. //toString() : 系统对象下面都是自带的 , 自己写的对象都是通过原型链找object下面的
  8. /*var arr = [];
  9. alert( arr.toString == Object.prototype.toString ); //false*/
  10. /*function Aaa(){
  11. }
  12. var a1 = new Aaa();
  13. alert( a1.toString == Object.prototype.toString );  //true*/
  14. //toString() : 把对象转成字符串
  15. /*var arr = [1,2,3];
  16. Array.prototype.toString = function(){
  17. return this.join('+');
  18. };
  19. alert( arr.toString() );  //'1,2,3'*/
  20. //var num = 255;
  21. //alert( num.toString(16) );  //'ff'
  22. //利用toString做类型的判断 :
  23. /*var arr = [];
  24. alert( Object.prototype.toString.call(arr) == '[object Array]' ); */ //'[object Array]'
  25. window.onload = function(){
  26. var oF = document.createElement('iframe');
  27. document.body.appendChild( oF );
  28. var ifArray = window.frames[0].Array;
  29. var arr = new ifArray();
  30. //alert( arr.constructor == Array );  //false
  31. //alert( arr instanceof Array );  //false
  32. alert( Object.prototype.toString.call(arr) == '[object Array]' );  //true
  33. };
  34. </script>
  35. </head>
  36. <body>
  37. </body>
  38. </html>

继承

  1. <!DOCTYPE HTML>
  2. <html>
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  5. <title>无标题文档</title>
  6. <script>
  7. //继承 : 子类不影响父类,子类可以继承父类的一些功能 ( 代码复用 )
  8. //属性的继承 : 调用父类的构造函数 call
  9. //方法的继承 : for in :  拷贝继承 (jquery也是采用拷贝继承extend)
  10. function CreatePerson(name,sex){   //父类
  11. this.name = name;
  12. this.sex = sex;
  13. }
  14. CreatePerson.prototype.showName = function(){
  15. alert( this.name );
  16. };
  17. var p1 = new CreatePerson('小明','男');
  18. //p1.showName();
  19. function CreateStar(name,sex,job){  //子类
  20. CreatePerson.call(this,name,sex);
  21. this.job = job;
  22. }
  23. //CreateStar.prototype = CreatePerson.prototype;
  24. extend( CreateStar.prototype , CreatePerson.prototype );
  25. CreateStar.prototype.showJob = function(){
  26. };
  27. var p2 = new CreateStar('黄晓明','男','演员');
  28. p2.showName();
  29. function extend(obj1,obj2){
  30. for(var attr in obj2){
  31. obj1[attr] = obj2[attr];
  32. }
  33. }
  34. </script>
  35. </head>
  36. <body>
  37. </body>
  38. </html>

对象的复制

  1. <!DOCTYPE HTML>
  2. <html>
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  5. <title>无标题文档</title>
  6. <script>
  7. /*var a = {
  8. name : '小明'
  9. };
  10. var b = a;
  11. b.name = '小强';
  12. alert( a.name );*/
  13. /*var a = {
  14. name : '小明'
  15. };
  16. //var b = a;
  17. var b = {};
  18. extend( b , a );
  19. b.name = '小强';
  20. alert( a.name );
  21. function extend(obj1,obj2){
  22. for(var attr in obj2){
  23. obj1[attr] = obj2[attr];
  24. }
  25. }*/
  26. var a = [1,2,3];
  27. var b = a;
  28. //b.push(4);
  29. b = [1,2,3,4];
  30. alert(a);
  31. </script>
  32. </head>
  33. <body>
  34. </body>
  35. </html>

继承的拖拽

  1. <!DOCTYPE HTML>
  2. <html>
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  5. <title>无标题文档</title>
  6. <style>
  7. #div1{ width:100px; height:100px; background:red; position:absolute;}
  8. #div2{ width:100px; height:100px; background:yellow; position:absolute; left:100px;}
  9. </style>
  10. <script>
  11. window.onload = function(){
  12. var d1 = new Drag('div1');
  13. d1.init();
  14. var d2 = new ChildDrag('div2');
  15. d2.init();
  16. };
  17. function Drag(id){  //父类
  18. this.obj = document.getElementById(id);
  19. this.disX = 0;
  20. this.disY = 0;
  21. }
  22. Drag.prototype.init = function(){
  23. var This = this;
  24. this.obj.onmousedown = function(ev){
  25. var ev = ev || window.event;
  26. This.fnDown(ev);
  27. document.onmousemove = function(ev){
  28. var ev = ev || window.event;
  29. This.fnMove(ev);
  30. };
  31. document.onmouseup = function(){
  32. This.fnUp();
  33. };
  34. return false;
  35. };
  36. };
  37. Drag.prototype.fnDown = function(ev){
  38. this.disX = ev.clientX - this.obj.offsetLeft;
  39. this.disY = ev.clientY - this.obj.offsetTop;
  40. };
  41. Drag.prototype.fnMove = function(ev){
  42. this.obj.style.left = ev.clientX - this.disX + 'px';
  43. this.obj.style.top = ev.clientY - this.disY + 'px';
  44. };
  45. Drag.prototype.fnUp = function(){
  46. document.onmousemove = null;
  47. document.onmouseup = null;
  48. };
  49. function ChildDrag(id){   //子类
  50. Drag.call(this,id);
  51. }
  52. extend( ChildDrag.prototype , Drag.prototype );
  53. ChildDrag.prototype.fnMove = function(ev){
  54. var L = ev.clientX - this.disX;
  55. var T = ev.clientY - this.disY;
  56. if(L<0){
  57. L = 0;
  58. }
  59. else if(L>document.documentElement.clientWidth - this.obj.offsetWidth){
  60. L = document.documentElement.clientWidth - this.obj.offsetWidth;
  61. }
  62. this.obj.style.left = L + 'px';
  63. this.obj.style.top = T + 'px';
  64. };
  65. function extend(obj1,obj2){
  66. for(var attr in obj2){
  67. obj1[attr] = obj2[attr];
  68. }
  69. }
  70. </script>
  71. </head>
  72. <body>
  73. <div id="div1"></div>
  74. <div id="div2"></div>
  75. </body>
  76. </html>

类式继承

  1. <!DOCTYPE HTML>
  2. <html>
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  5. <title>无标题文档</title>
  6. <script>
  7. //类 : JS是没有类的概念的 , 把JS中的构造函数看做的类
  8. //要做属性和方法继承的时候,要分开继承
  9. function Aaa(){   //父类
  10. this.name = [1,2,3];
  11. }
  12. Aaa.prototype.showName = function(){
  13. alert( this.name );
  14. };
  15. function Bbb(){   //子类
  16. Aaa.call(this);
  17. }
  18. var F = function(){};
  19. F.prototype = Aaa.prototype;
  20. Bbb.prototype = new F();
  21. Bbb.prototype.constructor = Bbb; //修正指向问题
  22. var b1 = new Bbb();
  23. //b1.showName();
  24. //alert( b1.name );
  25. //alert( b1.constructor );
  26. b1.name.push(4);
  27. var b2 = new Bbb();
  28. alert( b2.name );
  29. </script>
  30. </head>
  31. <body>
  32. </body>
  33. </html>

原型继承

    1. <!DOCTYPE HTML>
    2. <html>
    3. <head>
    4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    5. <title>无标题文档</title>
    6. <script>
    7. var a = {
    8. name : '小明'
    9. };
    10. var b = cloneObj(a);
    11. b.name = '小强';
    12. //alert( b.name );
    13. alert( a.name );
    14. function cloneObj(obj){
    15. var F = function(){};
    16. F.prototype = obj;
    17. return new F();
    18. }
    19. 拷贝继承:  通用型的  有new或无new的时候都可以
    20. 类式继承:  new构造函数
    21. 原型继承:  无new的对象
    22. </script>
    23. </head>
    24. <body>
    25. </body>
    26. </html>
上一篇:双系统安装Ubuntu


下一篇:Cesium原理篇:1最长的一帧之渲染调度