封装--javascript的原型(prototype)

这里介绍一种基于组合的对象定义
为了解决原型所带来的问题,需要通过组合构造函数和原型来实现对象的创建:将属性在构造函数中定义,将方法在原型中定义。这样有效结合了基于原型链和构造函数来定义对象的有点,是目前最为常用的一种方式。
代码演示如下:
<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
        <script type="text/javascript">
        //属性在构造方法中定义
            function Person(name,age,friends){
                this.name=name;
                this.age=age;
                this.friends=friends;
            }

            //将方法定义在原型中
            Person.prototype={
                constructor:Person,
                say:function(){
                    console.log("my name is :"+this.name+",age is :"+this.age);
                }
            };


            var p1=new Person("liyanan",13,["lh","jc"]);

            p1.friends.push("ld");

            console.log(p1.friends);

            p1.say();

            var p2=new Person("lyn",13,["lys","lc"]);

            console.log(p2.friends);

            p2.say();
        </script>
    </head>
    <body>
    </body>
</html>
运行结果:

这里写图片描述

此时的内存模块图如下所示:

这里写图片描述

这里介绍另外一种基于动态原型的对象定义(选学)
代码演示如下:
<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
        <script type="text/javascript">
            //属性在构造方法定义
            function Person(name,age,friends){
                this.name=name;
                this.age=age;
                this.friends=friends;
                //判断不存在的时候写,如果存在就不写,内存减少消耗
                if(!Person.prototype.say){
                    Person.prototype.say=function(){
                        console.log("my name is :"+this.name+",age is :"+this.age);
                    }
                }
            }


            var p1=new Person("liyanan",13,["lh","jc"]);

            p1.friends.push("ld");

            console.log(p1.friends);

            p1.say();

            var p2=new Person("lyn",13,["lys","lc"]);

            console.log(p2.friends);

            p2.say();
        </script>
    </head>
    <body>
    </body>
</html>
运行结果:

这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值