JS基础_构造函数修改


 1 <!DOCTYPE html>
 2 <html>
 3     <head>
 4         <meta charset="UTF-8">
 5         <title></title>
 6         <script type="text/javascript">
 7             
 8             /*
 9  * 10  * 创建一个Person构造函数 11  * - 在Person构造函数中,为每一个对象都添加了一个sayName方法,目前我们的方法是在构造函数内部创建的, 12  * 也就是构造函数每执行一次就会创建一个新的sayName方法,也就是所有实例的sayName都是唯一的。 13  * 这样就导致了构造函数执行一次就会创建一个新的方法, 14  * 执行10000次就会创建10000个新的方法,而10000个方法都是一摸一样的 15  * 这是没有必要的,完全可以使所有的对象共享同一个方法 16  * 17              */
18             
19             function PersonOne(name , age , gender){ 20                 this.name = name; 21                 this.age = age; 22                 this.gender = gender; 23                 //向对象中添加一个方法
24                 this.sayName = function(){ 25  alert("Hello大家好,我是:"+this.name); 26  } 27  } 28             
29             //创建一个Person的实例
30             var per = new PersonOne("孙悟空",18,""); 31             var per2 = new PersonOne("猪八戒",28,""); 32  per.sayName(); 33  per2.sayName(); 34             
35             //------------------------------------------------------------------------------------
36             
37             //那怎么办呢?试着将sayName方法在全局作用域中定义
38             
39             function PersonTwo(name , age , gender){ 40                 this.name = name; 41                 this.age = age; 42                 this.gender = gender; 43                 //向对象中添加一个方法
44                 this.sayName = fun; 45  } 46             
47             function fun(){ 48  alert("Hello大家好,我是:"+this.name); 49  }; 50             
51             //创建一个Person的实例
52             var per = new PersonTwo("孙悟空",18,""); 53             var per2 = new PersonTwo("猪八戒",28,""); 54  per.sayName(); 55  per2.sayName(); 56             
57             /*
58  * 可是将函数定义在全局作用域,污染了全局作用域的命名空间 59  * 而且定义在全局作用域中也很不安全 60              */
61             
62             //------------------------------------------------------------------------------------
63             
64             //那么可以怎么改呢?向原型中添加sayName方法
65             
66             /** 67  * 以后我们创建构造函数时,可以将这些对象共有的属性和方法,统一添加到构造函数的原型对象中, 68  * 这样不用分别为每一个对象添加,也不会影响到全局作用域,就可以使每个对象都具有这些属性和方法了 69              */
70             
71             function PersonThree(name , age , gender){ 72                 this.name = name; 73                 this.age = age; 74                 this.gender = gender; 75  } 76             //向原型中添加sayName方法
77  PersonThree.prototype.sayName = function(){ 78  alert("Hello大家好,我是:"+this.name); 79  }; 80             
81             //创建一个Person的实例
82             var per = new PersonThree("孙悟空",18,""); 83             var per2 = new PersonThree("猪八戒",28,""); 84  per.sayName(); 85  per2.sayName(); 86             
87             
88             
89         </script>
90     </head>
91     <body>
92     </body>
93 </html>

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM