美文网首页前端乱弹99日
前端乱弹99日之创建对象的四种写法

前端乱弹99日之创建对象的四种写法

作者: 业余马拉松选手 | 来源:发表于2018-05-13 23:44 被阅读5次

    又到了一周的这个“交”作业的时间,今天就“文绉绉”一把,谈谈“茴香豆”的“茴”字的四种写法吧~~
    哈哈,不对不对,是在JavaScript里,创建对象的四种写法,对自己学习前端的一个小小的总结。

    第一种方法:字面量法【JSON法】
    这种写法其实最简单,在JavaScript创建一个对象,代码如下:

    var house = {};
    console.log(typeof(house));
    

    这时,在控制台上输出的就是object,嗯,没错,在JavaScript里创建一个对象就是这么“随意”。
    好,接着我们看一个稍微复杂点的对象吧

    var house = {
        price:8000000,
        area:100,
        address:{
          city:"上海",
          district:"浦东新区",
          street:"世纪大道"
        }
    };
    console.log(house.price);
    console.log(house.address.district);
    

    这里,我们定义了一个house对象,然后里面其实还嵌套了一个address的对象。我分别可以获取house对象里的price属性。当然我也可以获得addrees这个属性下的指。
    这里,我们可以暂时将JavaScript里的对象看成key-value的键值对。其中值也可以继续是一个对象(肯定也是一个键值对)。
    这么看下上面这段代码是否就更好理解了些?
    好,那么我们继续再丰富下这段代码

    var house = {
        price:8000000,
        area:100,
        address:{
          city:"上海",
          district:"浦东新区",
          street:"世纪大道"
        },
        info:function(){
          console.log("这套房子面积为:"+this.area+",价格为"+this.price+"元");
        }
    };
    console.log(house.price);
    console.log(house.address.district);
    house.info();
    

    如果你有一点点编程基础,可以看到,我为house这个对象又定义了一个方法,用于输出这套房子的一些基本信息,其中要特别注意下,这里输出的area和price属性,是属于当前这个house对象的,需要增加this这个关键字哦。

    嗯,至此这种创建对象的方法也就介绍的差不多了,对于一个后端狗来说,看下上面那个对象的定义,就是是一个JSON字符串?嗯,对的呢,你想下JSON的全程是JavaScript Object Notation嘛。

    第二种方法:创建对象法
    这里我们继续以房子来举例,重新实现一下上面这段代码。

    var house = new Object();
    house.price = 8000000;
    house.area = 100;
    var address = new Object();
    address.city = "上海";
    address.district = "浦东新区";
    address.street = "世纪大道";
    house.address = address;
    house.info = function(){
      console.log("这套房子面积为:"+this.area+",价格为"+this.price+"元");
    };
    

    这次,我们是直接用JavaScript提供的new Object()这个语法来完成创建一个对象的,然后本身语言是支持对这个对象增加、删除属性、方法。同时也是支持点语法的,对于一个后端狗来说,相对第一种,也许这种方法还更好理解一些吧?但就是写起来有点太麻烦,而且还不够通用似的?因为这里直接就是对象的概念,而JavaScript真的没有类这个概念吗?嗯,好吧,这是一个“更好”的话题,可以足以开一篇文章都未必讲的清楚呢(好吧,我承认是我比较渣啦~),那么回过头来,我们接着还有一种实现方法,看起来有那么一点点像“类”的意思呢。
    第三种方法:构造函数法

    嗯,我们继续重新实现一下上面那段示例代码:

    function Address(city,district,street){
        this.city = city;
        this.district = district;
        this.street = street;
    }
    function House(price,area,address){
        this.price = price;
        this.area = area;
        this.address = address;
        this.info = function(){
            console.log("这套房子面积为:"+this.area+",价格为"+this.price+"元");
        }
    }
    address = new Address("上海市",“浦东新区”,"世纪大道");
    house = new House(8000000,100,address);
    house.info();
    

    这里是“定义”好了address和house这两个对象的蓝图,然后用new这个关键字去最终“实现”完成,看来还真是挺像定义了一个类吧?这种方法看起来是不是更顺眼了一点呢?

    嗯,最后为了凑齐“茴香豆”的四种写法,就又拼了一种利用工厂模式的【嗯,是的,这次我们没有讨论原型,不过请放心,原型是一定会说到的,哈哈哈】

    第四种方法:工厂模式法
    还是老规矩,我们继续重新实现一遍这段代码:

    function createHouse(price,area,city,district,street){
        var house = new Object();
        house.price = price;
        house.area = area;
        var address = new Object();
        address.city = city;
        address.district = district;
        address.street = street;
        house.address = address;
        house.info = function(){
          console.log("这套房子面积为:"+this.area+",价格为"+this.price+"元");
        };
        return house;
    }
    var house = createHouse(8000000,100,"上海","浦东新区","世纪大道");
    house.info();
    

    嗯,上面这种实现的方式,是利用了工厂模式,“封装”了一个房子对象的创建过程,至于内部实现,这里还是利用了new Object() 这种语法,那么是否还有其他的方法?嗯,肯定还是有的,“茴”字的写法也还真不止四种,那么实际在写代码的过程中,应该是用哪几种呢?嗯,留给你和我一起思考~

    相关文章

      网友评论

        本文标题:前端乱弹99日之创建对象的四种写法

        本文链接:https://www.haomeiwen.com/subject/ezdrdftx.html