zoukankan      html  css  js  c++  java
  • javascript学习笔记10(基于组合与动态原型创建对象)

    基于组合与动态原型创建对象 

    方法一:在外部设置prototype

    <script type="text/javascript">
    /**
     * 为了解决原型所带来的问题,此处需要通过组合构造函数和原型来实现对象的创建
     * 将属性在构造函数中定义,将方法在原型中定义
     * 这种有效集合了两者的优点,是目前最为常用的一种方式
     */
        function Person(name,age,friends){
            //属性在构造函数中定义
            this.name = name;
            this.age = age;
            this.friends = friends;
        }
        Person.prototype = {
            constructor:Person,
            //方法在原型中定义
            say:function() {
                alert(this.name+"["+this.friends+"]");
            }
        }
        //此时所以的属性都是保存在自己的空间中的
        var p1 = new Person("Leon",23,["Ada","Chris"]);
        p1.name = "John";
        p1.friends.push("Mike");//为p1增加了一个朋友
        p1.say();
        var p2 = new Person("Ada",33,["Leon"]);
        //此时原型中就多了一个Mike,这就是原型所带来的第二个问题
        p2.say();//leon ada chris mike
    </script>

    方法二:内部设置,prototype设置为单例,减少资源浪费

    <script type="text/javascript">
    /**
     * 为了让定义的方式更加符合java的需求,就把定义方法的原型代码放置到Person这个构造函数中
     */
        function Person(name,age,friends){
            //属性在构造函数中定义
            this.name = name;
            this.age = age;
            this.friends = friends;
            
            //不能使用重写的方式定义
            /*Person.prototype = {
                constructor:Person,
                //方法在原型中定义
                say:function() {
                    alert(this.name+"["+this.friends+"]");
                }
            }*/
            /**
             * 判断Person.prototype.say是否存在,如果不存在就表示需要创建
             * 当存在之后就不会在创建了
             */
            if(!Person.prototype.say) {
                Person.prototype.say = function() {
                    alert(this.name+"["+this.friends+"]");
                }    
            }
        }
        
        //此时所以的属性都是保存在自己的空间中的
        var p1 = new Person("Leon",23,["Ada","Chris"]);
        p1.name = "John";
        p1.friends.push("Mike");//为p1增加了一个朋友
        p1.say();
        var p2 = new Person("Ada",33,["Leon"]);
        //此时原型中就多了一个Mike,这就是原型所带来的第二个问题
        p2.say();//leon ada chris mike
        </script>

  • 相关阅读:
    Construct Binary Tree from Preorder and Inorder Traversal
    Construct Binary Tree from Inorder and Postorder Traversal
    Maximum Depth of Binary Tree
    Sharepoint 2013 创建TimeJob 自动发送邮件
    IE8 不能够在Sharepoint平台上在线打开Office文档解决方案
    TFS安装与管理
    局域网通过IP查看对方计算机名,通过计算机名查看对方IP以及查看在线所有电脑IP
    JS 隐藏Sharepoint中List Item View页面的某一个字段
    SharePoint Calculated Column Formulas & Functions
    JS 两个一组数组转二维数组
  • 原文地址:https://www.cnblogs.com/canceler/p/4523917.html
Copyright © 2011-2022 走看看