zoukankan      html  css  js  c++  java
  • JavaScript中使用比较多的两种创建对象的方式

    1、使用组合模式创建对象

    原型模式创建对象适合封装方法,构造方法模式创建对象适合封装属性

    组合方法缺点:将构造方法和原型分开写


    <script type="text/javascript">
         //在构造方法内部封装属性
         function Person(name, age) {
             this.name = name;
             this.age = age;
        }
         //在原型对象内封装方法
         Person.prototype.eat = function (food) {
             alert(this.name + "Eat" + food);
        }
         Person.prototype.play = function (playName) {
             alert(this.name + "Play" + playName);
        }
         
         var p1 = new Person("Jack", 20);
         var p2 = new Person("Mark", 30);
         p1.eat("apple");
         p2.eat("orange");
         p1.play("football");
         p2.play("games");
     </script>

    2、动态原型模式创建对象

    动态原型模式把所有的属性和方法都封装在构造方法中,仅仅在需要的时候才去在构造方法中初始化原型,又保持了同时使用构造函数和原型的有点。


    <script type="text/javascript">
         //构造方法内部封装属性
         function Person(name, age) {
             //每个对象都添加自己的属性
             this.name = name;
             this.age = age;
             /*
                判断this.eat这个属性是不是function,如果不是function则证明是第一次创建对象,
                则把这个funcion添加到原型中。
                如果是function,则代表原型中已经有了这个方法,则不需要再添加。
                perfect!完美解决了性能和代码的封装问题。
            */
             if(typeof this.eat !== "function"){
                 Person.prototype.eat = function () {
                     alert(this.name + " Eat good");
                }
            }
        }
         var p1 = new Person("Jack", 40);
         p1.eat();  
     </script>

  • 相关阅读:
    最小生成树(Prim和Kruscal)
    SPFA(还是稍微写写吧,虽然没什么用)
    最短路径(随便写写)(Floyd,Bellman-Ford,Dijkstra)
    Just a Hook HDU
    数论逆元
    最长上升子序列(LIS)算法(附Codeforces Round #641 (Div. 2),B题题解)
    Educational Codeforces Round 86 (Rated for Div. 2)
    Codeforces Round #633 (Div. 2)
    Codeforces Round #631 (Div. 2)
    Mayor's posters(线段树离散化)
  • 原文地址:https://www.cnblogs.com/wuweb/p/9376073.html
Copyright © 2011-2022 走看看