jS对象的几种创建方法

1.字面量的方式

  • 优点:划分命名空间,当前命名空间下的属性都是私有的
  • 缺点:属于手工作业,不能实现批量生产
    //描述学员信息
    var stu1 = {
        name :张三";
        age: "18";
        intrioduce function(){
        console.log("我叫"+this.name+",我今年"+this.age+",我来学习js了~~~");
    }
    };
    stu1.introduce();

    2.工厂模式

  • 优点:划分命名空间,当前命名空间下的属性都是私有的,可以实现批量生产
  • 缺点:不能实例识别
  •  function Student(name,age){
                //创建一个空对象
                var obj = {};
                //给这个对象增加属性和值
                obj.name = name;
                obj.age = age;
                obj.introduce = function(){
                    console.log("我叫"+this.name+",我今年"+this.age+",我来学习js了");
                }
                return obj;
            }
            var stu1 = Student("王晨",18);
            var stu2 = Student("张三",18);
            console.log(stu1,stu2);
            stu1.introduce();
            stu2.introduce();
    
            console.log(stu1 instanceof Student);//false
            console.log(stu2 instanceof Student);//false
        </script>

    3.构造函数方式

  • 优点:

  • 划分命名空间,当前命名空间下的属性都是私有的,可以实现批量生产,能够实现实例识别

  • 缺点:不能实现公有

new一下 

  1. 首先将当前这个函数执行
  2. 会自动创建一个空对象  是this (this就是那个对象,可以理解为当前这个类的实例),自动返回

 

//构造函数方式
        //优点:划分命名空间,当前命名空间下的属性都是私有的,可以实现批量生产,能够实现实例识别
        //缺点:不能实现公有

        //学生类(类的本质就是函数)
        function Student(name,age){
            //this -> 一个空对象(实例) 自动帮我们创建

            给当前这个空对象增加属性和值
            this.name = name;
            this.age = age;
            this.introduce = function(){this.age
                console.log("我叫" + this.name + ",我今年" +this.age + "岁,我来学习js了");
            }
            //自动返回
        }
        //new一下:
        //1.首先将当前这个函数执行
        //2.会自动创建一个空对象  是this(this就是那个对象,可以理解为当前这个类的实例),自动返回。
        var stu1 = new Student("张三",100);
        var stu2 = new Student("李四",12);
        console.log(stu1,stu2);
        
        stu1.introduce();
        stu2.introduce();

        console.log(stu1 instanceof Student);//true
        console.log(stu2 instanceof Student);//true
        console.log(stu1.introduce == stu2.introduce);//false  两个对象是完全独立的,属性都是私有的,introduce都是各自私有不是同一个函数

 4.原型模式

优点:划分命名空间,当前命名空间下的属性都是私有的,可以实现批量生产,能够实现实例识别,实现私有是私有,公有是公有。

  //原型模式 将公有的属性加到prorotype上
        Student.prototype.introduce = function(){
            console.log("我叫" + this.name + "我今年" + this.age + ",我来学习js啦");
        }
        var stu1 = new Student("张三",13);
        var stu2 = new Student("李四",13);

        stu1.introduce();
        stu2.introduce();

        console.log(stu1.introduce == stu2.introduce);//true

5.原型链

每个对象都天生自带一个属性__proto__,这个属性指向当前这个实例所属类的原型

首先原型链是一种查找机制,当前对象(实例)用到某个属性的有私有的先用私有的,没有私有的就通过__proto__属性往原型上进行查找。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值