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>

  • 相关阅读:
    (转)ASP.NET Mvc 2.0 1. Areas的创建与执行
    新世代交易管理機制~System.Transactions
    水晶報表入門
    MyGeneration 如何连接 mysql 来生成代码
    vs.net 启动不了
    Oracle面试问题-技术篇
    把excel两列字符数据用逗号合并起来
    论Leader的技能
    物流行业名词
    html 向aspx 页面传值
  • 原文地址:https://www.cnblogs.com/wuweb/p/9376073.html
Copyright © 2011-2022 走看看