构造函数模式

40 篇文章 0 订阅
32 篇文章 0 订阅
<script>
       //工厂模式
        function createJsPerson(name, age) {
                var obj = {};
                obj.name = name;
                obj.age = age;
                obj.writeJs = function () {
                    console.log("my name is " + this.name + " I can write JS");

                };
                return obj;
            }
            var p1 = createJsPerson("xiaobo", 16);
            p1.writeJs();



       //构造函数的目的就是为了创建一个自定义类,并且创建这个类的实例
            //构造函数模式跟工厂模式的区别
            function CreateJsPerson(name, age) {
                    // var obj = {};//默认创建  不需要手动创建
                    this.name = name;
                    this.age = age;
                    this.writeJs = function () {
                        console.log("my name is " + this.name + " I can write JS");

                    };
                    // return obj;//不需要手动返回,浏览器再把创建的实例默认的进行返回
                }
                var p1 = new CreateJsPerson("xiaobo", 16);
                p1.writeJs();
                var p2 = new CreateJsPerson("王小波",18);
                p2.writeJs();
                var res = CreateJsPerson("xx",11);//这么写不是构造函数模式而是普通的函数执行,由于没有写return所以res=undefined,并且CreateJsPerson中的this是window
            //1.执行的时候
            //普通函数执行->createJsPerson()
            //构造函数执行->new CreateJsPerson()  通过new执行后,我们的CreateJsPerson()就是一个类了\
            //而函数执行的返回值p1就是CreateJsPerson这个类的一个实例
            //2.在函数代码执行的时候
            //相同点:都是形成一个私有作用域,然后 形参赋值->预解释->代码从上到下执行(类和普通函数一样,他也有普通的一面)
            //不同:在代码执行之前,不用自己手动创建obj对象了,浏览器会默认创建一个对象数据类型的值
            //这个对象其实就是当前类的一个实例
            //接下来代码从上到下执行,以当前的实例为执行的主题(this代表的就是当前的实例),然后分别的把属性名和属性
            //值赋值给当前的实例
            //最后浏览器会默认的把创建的实例返回




            //创建一个数组:
            var ary = [];//字面量方式
            var ary = new Array();//实例创建的方式->构造函数模式执行的方式
            //无论哪一种方式 ary都是Array这个类的一个实例
            //在js中  所有的类 都是函数数据类型的,它通过new执行变成了一个类,但是它本身也是一个普通的函数
            //js当中 所有的实例都是对象数据类型的
            //2
            //在构造函数模式当中,类中(函数体中)出现的this.xxx=xxx中的this是当前类的一个实例
            //3.
            //虽然p1和p2都是CreateJsPerson这个类的实例,所以都拥有writeJs这个方法,但是不同实例之间的方法是不一样的
            //在类中给实例增加的属性(this.xxx=xxx)属于当前实例的私有的属性,实例和实例之间是单独的个体,所以私有的属性之间是不相等的.
            console.log(p1.writeJS===p2.writeJs);//->false
   </script>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值