javascript创建对象的几种方式

JS创建对象的几种方式

/*第一种方法
使用Object构造函数来创建一个对象
*/

        // var person = new Object();
        // person.name="kevin";
        // person.age=31;
        // alert(person.name);
        // alert(person["name"]);

/*第二种方法
使用对象字面量创建一个对象
*/

        // var person = 
        // {
        //     name:"Kevin",
        //     age:31,
        //     5:"Test"
        // };

        // alert(person.name);
        // alert(person["5"]);

/*第三种方法
使用自定义构造函数模式创建对象;这里注意命名规范,作为构造函数的函数首字母要大写,以区别其它函数。这种方式有个缺陷是sayName这个方法,它的每个实例都是指向不同的函数实例,而不是同一个。
*/

        // function Person(name,age,job)
        // {
        //     this.name=name;
        //     this.age=age;
        //     this.job=job;
        //     this.sayName=function()
        //     {
        //         alert(this.name);
        //     };
        // }

        // var person = new Person("kevin",31,"SE");
        // person.sayName();


        // var person1 = new Person("zhangsan",30,"SE");
        // person1.sayName();




        function Person(){

            this.name='zhangsn';
            this.age=20;
            this.friends=["Jams","Martin"];
            this.setName=function(name){

                this.name=name;
            };
            this.getName=function(){

                return this.name;
            };
            this.sayFriends=function(){

                console.log(this.friends);
            }


        }

        var p1=new Person();  /*它的每个实例都是指向不同的函数实例,而不是同一个。*/

        p1.friends.push("Joe");
        p1.sayFriends();//Jams,Martin,Joe
        var p2 = new Person(); 
        p2.sayFriends();//James,Martin

/*第四种方法

使用原型模式创建对象;解决了方法4中提到的缺陷,使不同的对象的函数(如sayFriends)指向了同一个函数。但它本身也有缺陷,就是实例共享了引用类型friends,从下面的代码执行结果可以看到,两个实例的friends的值是一样的,这可能不是我们所期望的。
*/

        // function Person()
        // {

        // }

        // Person.prototype = {//多个实例共享
        //     constructor : Person,
        //     name:"kevin",
        //     age:31,
        //     job:"SE",
        //     friends:["Jams","Martin"],
        //     sayFriends:function()
        //     {
        //         alert(this.friends);
        //     }
        // };


        // var person1 = new Person();
        // person1.friends.push("Joe");
        // person1.sayFriends();//Jams,Martin,Joe
        // var person2 = new Person(); 
        // person2.sayFriends();//James,Martin,Joe

/*第五种
组合使用原型模式和构造函数创建对象,解决了方法4中提到的缺陷,而且这也是使用最广泛、认同度最高的创建对象的方法。
*/

        // function Person(name,age,job)
        // {
        //     this.name=name;
        //     this.age=age;
        //     this.job=job;
        //   this.friends=["Jams","Martin"];  //每个实例都是指向不同的函数实例 
        // }

        // Person.prototype.sayFriends=function() //多个实例共享 
        // {
        //     alert(this.friends);
        // };

        // var person1 = new Person("kevin",31,"SE");
        // var person2 = new Person("Tom",30,"SE");
        // person1.friends.push("Joe");
        // person1.sayFriends();//Jams,Martin,Joe
        // person2.sayFriends();//Jams,Martin
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值