1 <script type="text/Javascript"> 2 //1、结合使用构造函数模式和原型模式 3 //2、动态原型模式 4 //3、寄生构造函数模式 5 //4、稳妥构造函数模式 6 7 //创建自定义类型的常见方式就是组合使用构造函数模式和原型模式。构造函数模式用于定义是实例属性,而原型模式用于定义 8 //实例属性,而原型用于定义方法和共享的属性。结果,每个实例都会有自己的副本,但同时又共享着对方法的引用,节省内存。 9 10 function Person(name, age, job) {11 var _self = this;12 _self.name = name;13 _self.age = age;14 _self.job = job;15 _self.friends = ["张三", "李四"];16 }17 18 Person.PRototype = {19 constructor: Person,20 sayName: function () {21 alert(this.name);22 }23 }24 25 26 var person1 = new Person("徐磊", 23, "IT");27 var person2 = new Person("刘德华", 55, "歌手");28 29 person1.friends.push("张学友");30 alert(person1.friends);31 alert(person2.friends);32 alert(person1.friends === person2.friends);//false33 alert(person1.sayName === person2.sayName);//true34 35 //2、动态原型模式36 function Person(name,age,job){37 this.name=name;38 this.age=age;39 this.job=job;40 if(typeof this.sayName !="function"){41 Person.prototype.sayName=function(){42 alert(this.name)43 }44 }45 }46 47 //3、寄生构造函数模式48 function Person(name,age,job) {49 var o=new Object();50 o.name=name;51 o.age=age;52 o.job=job;53 o.sayName=function(){54 alert(this.name);55 }56 return o;57 }58 59 //这个模式可以在特殊情况下为对象创建构造函数。60 function SpecialArray() {61 var values=new Array();62 values.push.apply(values,arguments);63 values.toPiedString=function(){64 return this.split('|');65 }66 return values;67 }68 69 var colors=new SpecialArray("red","blue","green");70 colors.toPiedString();//"red|blue|green"71 72 73 //4、稳妥构造函数模式74 //稳妥构造函数的模式是遵循寄生构造函数的模式,但是有两点不同:1、新创建对象的实例方法不引用this;2、不使用new操作符调用构造函数75 function Person(name,age,job) {76 var o=new Object();77 //这里可以定义私有变量78 //添加方法79 o.sayName=function(){80 alert(this.name);81 }82 return o;83 }84 85 var friends=Person("xulei",23,"IT");86 friends.sayName();//xulei87 88 89 </script>
新闻热点
疑难解答