前端乱弹99日

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

2018-05-13  本文已影响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() 这种语法,那么是否还有其他的方法?嗯,肯定还是有的,“茴”字的写法也还真不止四种,那么实际在写代码的过程中,应该是用哪几种呢?嗯,留给你和我一起思考~

上一篇 下一篇

猜你喜欢

热点阅读