• Javascript-Object-Definition


      1 /* 定义对象的方法:构造函数,函数字面量法,工厂模式,构造函数模式 */
      2 
      3     /**************************************/
      4     /**                                  **/
      5     /**         1.原生构造函数法         **/
      6     /**                                  **/
      7     /**************************************/
      8 
      9     //只能创建特定的对象,使用原生的构造函数,比如:Object,Array。
     10     var prince = new Object();
     11     prince.name = "Prince";
     12     prince.age = 25;
     13     prince.job = "Front End Engineer";
     14     prince.sayJob = function(){
     15         alert(prince.job);
     16     };
     17     var xiaobao = new Object();
     18     xiaobao.name = "Zhibao Hu";
     19     xiaobao.age = 25;
     20     xiaobao.job = "SEO";
     21     xiaobao.sayJob = function(){
     22         alert(xiaobao.job);
     23     };
     24     prince.sayJob();
     25     xiaobao.sayJob();
     26 
     27     /**************************************/
     28     /**                                  **/
     29     /**           2.字面量法             **/
     30     /**                                  **/
     31     /**************************************/
     32 
     33     //javascript对象中实行名称可以加双引号,单引号,或者不加,但是json数据一定要用双引号,不加引号或者用单引号都会出错。
     34     var xiaoyin = {
     35         name : "Chaohuan Yin",
     36         age : 24,
     37         job : "Wireless Yunyin",
     38         sayAge : function(){
     39             //这里如果省略了this就会出错。
     40             alert(this.age);
     41         }
     42     };
     43     xiaoyin.sayAge();
     44 
     45     //以上两种方法的缺点:使用一个接口创建很多对象,代码重复很多。
     46     //为了解决这个问题,人们开始使用工厂模式和他的变体
     47 
     48     /**************************************/
     49     /**                                  **/
     50     /**           3.工厂模式             **/
     51     /**                                  **/
     52     /**************************************/
     53 
     54     //用函数来封装以特定接口创建对象的细节
     55     function createPerson(name,age,job){
     56         var o = new Object();
     57         o.name = name;
     58         o.age = age;
     59         o.job = job;
     60         o.sayAge = function(){
     61             alert(this.age);
     62         };
     63         return o;
     64     }
     65     var tangtang = createPerson("Jin Shi",23,"Shop Yunyin");
     66     tangtang.sayAge();
     67     //工厂模式没有办法知道一个对象的类型,所以出现了构造函数模式,自己定义构造函数
     68 
     69     /**************************************/
     70     /**                                  **/
     71     /**        4.自定义构造函数法        **/
     72     /**                                  **/
     73     /**************************************/
     74 
     75     function Person(name,age,job){
     76         this.name = name;
     77         this.age = age;
     78         this.job = job;
     79         this.sayName = function(){
     80             alert(this.name);
     81         };
     82     }
     83     //当构造函数使用
     84     var liujie = new Person("Jie Liu",27,"Yunwei");
     85     //当普通函数使用
     86     Person("Qinqin Yu",27,"Shop Yunyin");//添加到window中
     87     liujie.sayName();
     88     window.sayName();
     89     //在另一个对象的作用域中使用
     90     var o = new Object();
     91     Person.call(o,"Prince",25,"F2E");
     92     o.sayName();
     93     
     94     //将构造函数中的方法提取出来
     95     function Person1(name,age,job){
     96         this.name = name;
     97         this.age = age;
     98         this.job = job;
     99         this.sayName = sayName;
    100     }
    101     function sayName(){
    102         alert(this.name);
    103     }
    104     var prince = new Person1("Prince Yu",25,"Front End Engineer");
    105     var xiaoyin = new Person1("Chaohuan Yin",24,"Shop Yunyin");
    106     prince.sayName();
    107     xiaoyin.sayName();
    108 
    109     /**************************************/
    110     /**                                  **/
    111     /**             5.原型模式           **/
    112     /**                                  **/
    113     /**************************************/
    114     //1.原型对象方法
    115     function Person2(){}
    116     Person2.prototype.name = "Prince";
    117     Person2.prototype.age = 29;
    118     Person2.prototype.job = "F2E";
    119     Person2.prototype.sayAge = function(){
    120         alert(this.age);
    121     };
    122     var dada = new Person2();
    123     var prince = new Person2();
    124     dada.sayAge();
    125     prince.sayAge();
    126 
    127     //2.原型对象字面量方法
    128     function Person3(){}
    129     Person3.prototype = {
    130         name : "Prince",
    131         age : 30,
    132         job : "F2E",
    133         sayAge : function(){
    134         alert(this.age);
    135         }
    136     };
    137     var wangzi = new Person3();
    138     wangzi.sayAge();
    139 
    140     /**************************************/
    141     /**                                  **/
    142     /** 6.组合使用构造函数模式和原型模式 **/
    143     /**                                  **/
    144     /**************************************/
    145 
    146     function Person4(name,age,job){
    147         this.name = name;
    148         this.age = age;
    149         this.job = job;
    150         this.friends =["Wangbing","Liutan"];
    151     }
    152     Person4.prototype = {
    153         constructor : Person4,
    154         sayAge : function(){
    155         alert(this.age);
    156         }
    157     }
    158     var dada =new Person4("Prince",25,"F2E");
    159     var xiaobao =new Person4("Zhibao Hu",25,"SEO");
    160     dada.friends.push("Prince Yu");
    161     alert(dada.friends);
    162     alert(xiaobao.friends);
    163     alert(xiaobao.friends == dada.friends);
    164     alert(xiaobao.sayAge == dada.sayAge);
    165     //这是用来定义引用类型的一种默认方式
  • 相关阅读:
    算法基础<七> 加权有向图
    union 分页/group/join 复杂查询(.net core/framework)
    扩展Elasticsearch客户端简化ES查询(.net core/framework)
    对EF Core进行扩展使支持批量操作/复杂查询
    Grpc对象转proto代码工具
    扩展ADO.net实现对象化CRUD(.net core/framework)
    Sublime Text 4 破解笔记
    python三元表达式(三目运算符)的坑
    xaf-常见问题解答
    xaf.blazor中如何开启诊断按钮
  • 原文地址:https://www.cnblogs.com/snowinmay/p/3205084.html
Copyright © 2020-2023  润新知