zoukankan      html  css  js  c++  java
  • js创建对象的多种方式及优缺点

    js创建对象的多种方式及优缺点

     

    在js中,如果你想输入一个的信息,例如姓名,性别,年龄等,如果你用值类型来存储的话,那么你就必须要声明很多个变量才行,变量声明的多了的话,就会造成变量污染。所以最好的方式就是存储到对象中。下面能我就给大家介绍几种创建对象的方式,并且给大家说一下他们的优缺点

    方式一:对象字面量

    var obj={
                    name:"赵云",
                    type:"突进",
                    skill:"抢人头"
                }

    缺点:只能创建一次对象,复用性较差,如果要创建多个对象,代码冗余度太高

    方式二:使用内置构造函数

    var obj=new Object();
                    obj.name="李白";
                    obj.type="刺客";
                    obj.skill="舞剑";

    缺点:只能创建一次对象,复用性较差,如果要创建多个对象,代码冗余度太高

    方式三:工厂模式(不推荐使用)

    复制代码
    function creat(name,type,skill){
                var obj=new Object();
                    obj.name=name;
                    obj.type=type;
                    obj.skill=skill;
                    obj.say=function(){
                        console.log("黄河之水天上来");
                    }
                    return obj;
            }
            var hero=creat("李白","刺客","写诗");
            var heroNext=creat("赵云","突进","将军");
    复制代码

    缺点:对象无法识别,因为所有的实例都指向一个原型

    方法四:构造函数模式

    复制代码
    function Person(singer,song,type){
                //默认吧this传给new出来的对象,并且默认是返回该对象
                this.singer=singer;
                this.song=song;
                this.type=type;
            }
            var obj=new Person("田馥甄","小幸运","流行歌");
            console.log(obj);
    复制代码

    注意点:1.如果不写返回值,默认返回的是新创建出来的对象 (一般都不会去写这个return语句)

         2.如果我们自己写return语句 return的是空值(return;),或者是基本类型的值或者null,都会默认返回新创建出来的对象

         3.如果返回的是object类型的值,将不会返回刚才新创建的对象,取而代之的是return后面的值

    优点:实例时可以识别为一个特定的类型

    缺点:构造函数中定义函数,那么每次创建对象,都会重新创建该函数,这样会导致全局变量增多,造成污染,代码结构会混乱,不易维护

    方法五:原型

    复制代码
     function Person(name, age, gender) {
                this.name = name;
                this.age = age;
                this.gender = gender;
    
            }
            var p =new Person("张学友",18,"male");
            var p1 = new Person("刘德华",19,"male");
            Person.prototype.sayHello = function () {
                console.log("你好我是" + this.name);
            }
            Person.prototype["sing"] = function () {
                console.log("一千个伤心的母牛");
            }
            p.sayHello();
            p1.sayHello();
            p.sing();
            p1.sing();
    复制代码

    优点:说明:构造函数的原型对象中的成员,可以被该构造函数创建出来的所有对象访问,而且,所有的对象共享该对象,所以,我们可以将构造函数中需要创建的函数,放到原型对象中存储,这样就解决 全局变量污染的问题 以及 代码结构混乱的问题

    缺点:不能初始化参数

  • 相关阅读:
    视图同义词创建
    单据打印模板默认启用打印机本身设置尺寸设置方法
    C语言结构体指针成员强制类型转换
    swoole中swoole_timer_tick回调函数使用对象方法
    利用phpspreadsheet切割excel大文件
    实例讲解如何利用jQuery设置图片居中放大或者缩小
    PHP小练习题
    html5中的progress兼容ie,制作进度条样式
    html5 图片热点area,map的用法
    详解JavaScript中的arc的方法
  • 原文地址:https://www.cnblogs.com/libin-1/p/6959233.html
Copyright © 2011-2022 走看看