建站学 - 轻松建站从此开始!

建站学-个人建站指南,网页制作,网站设计,网站制作教程

JavaScript创建自定义对象的几种常见方式与比较

时间:2012-01-03 18:01来源: 作者: 点击:
初学JavaScript,正在读 Nicholas C. Zakas 的《JavaScript高级程序设计》,看到了创建对象,简单的对书中内容做了一下总结     1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-

初学JavaScript,正在读 Nicholas C. Zakas 的《JavaScript高级程序设计》,看到了创建对象,简单的对书中内容做了一下总结

 

  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     <title></title>  5 </head>  6 <body>  7     <script type="text/javascript">  8 //1.创建Object,为其添加属性方法  9 var person = new Object(); 10         person.name = "Nicholas"; 11         person.age = 29; 12         personal.job = "Software Engineer"; 13  14         personal.sayName = function () { 15             alert(this.name); 16         }; 17  18 /* 19         缺点:使用一个接口创建很多对象,会产生大量重复代码 20 */ 21  22 //2.工厂模式 23 function createPersonal(name, age, job) { 24 var o = new Object(); 25             o.name = name; 26             o.age = age; 27             o.job = job; 28             o.sayName = function () { 29                 alert(this.name); 30             }; 31 return o; 32         } 33  34 /* 35         工厂模式解决了对象相似问题,却没有解决对象识别问题(怎样知道一个对象的类型) 36 */ 37  38 //3.构造函数模式 39 function Person(name, age, job) { 40 this.name = name; 41 this.age = age; 42 this.job = job; 43 this.sayName = function () { 44                 alert(this.name); 45             }; 46         } 47  48 /* 49         构造函数模式没有显式的创建对象,直接将方法和属性赋给了this对象,没有return语句 50         要创建Person的新实例,必须使用new操作符,实际经历4个步骤 51         a.创建一个新对象 52         b.将构造函数的作用域赋给新对象(this指向这个新对象) 53         c.执行构造函数,为新对象添加属性 54         d.返回新对象 55         构造函数模式创建的对象可以识别其类型,但每个方法都要在每个实例上重建一遍 56 */ 57  58 //创建两个实例,创建两个相同的方法没必要,可以把函数定义转到方法外部 59 function Person(name, age, job) { 60 this.name = name; 61 this.age = age; 62 this.job = job; 63 this.sayName = sayName; 64         } 65  66 function sayName() { 67             alert(this.name); 68         } 69  70 /* 71         这样解决了两个方法做同一件事的的问题,但在全局作用域上定义的函数只能被某个对象调用,如果对象定义需要很多方,就要定义很多全局函数,自定义的引用类型就没有封装         性了 72 */ 73  74 //4.原型模式 75 function Person() { 76         } 77  78         Person.prototype.name = "Nocholas"; 79         Person.prototype.age = 29; 80         Person.prototype.job = "Software Engineer"; 81         Person.prototype.sayName = function () { 82             alert(this.name); 83         } 84  85 /* 86         原型模式所有参数默认取得相同的值,属性若为引用类型,多个实例之间互相影响 87 */ 88  89 //5.构造函数原型混合模式 90 function Person(name, age, job) { 91 this.name = name; 92 this.age = age; 93 this.job = job; 94         } 95  96         Person.prototype.sayName = function () { 97             alert(this.name); 98         } 99 100 /*101         构造函数用于定义实例属性,原型用于定义方法和共享属性,。eigenvalue实例都会有一份自己实例属性的副本,
      同时享用着对共享方法的引用,目前来看几乎是最合适的创建对象方式了102 */103 104 105 </script>106 </body>107 </html>

(责任编辑:admin)
织梦二维码生成器
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片