zoukankan      html  css  js  c++  java
  • javascript——面向对象程序设计(3)

     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);//false
    33         alert(person1.sayName === person2.sayName);//true
    34 
    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();//xulei
    87 
    88 
    89     </script>
  • 相关阅读:
    springAOP源码分析之篇三:代理对象的执行
    springAOP源码分析之篇二:代理对象的生成
    css样式float造成的浮动“塌陷”问题的解决办法
    css font的简写规则
    CSS学习
    工具
    用过的库
    The requested URL ***** was not found on this serve
    修改DeDe标签Pagelist分页样式
    DedeCms autoindex和itemindex使用介绍
  • 原文地址:https://www.cnblogs.com/goesby/p/4248965.html
Copyright © 2011-2022 走看看