首页 > 代码库 > 创建对象

创建对象

  为什么要讲创建对象?因为这实在是太重要了!当我们需要使用javascript构建比较大型点的应用时,一般都会需要创建对象。当然,在不同的场景下,我们需要以不同的方式去创建对象,因为它们有不同的作用。创建对象有很多种方式,今天我主要谈一谈我经常所用到的对象创建方式,做个记录,以免日后遗忘。

  主要分为两大类,先说第一类:通过常见的引用类型创建实例,最典型的莫过于,通过字面量的方式创建Object引用类型的实例。例如

var singleton = {    name : xiaodao,    method : function(){        return this.name;    }}

这个对象继承了Object引用类型的属性和方法,并且定义了name属性和method方法。除此之外,也可以通过这种方式来创建单例对象,单例对象被用于模块模式,模块模式:

application = function(){    /*私有变量和私有函数*/    var arr = [1,2,3];    /*初始化*/    arr.push(4);    return {   //返回一个对象        /*公有函数*/        getarr : function(){            return arr;        },        registerarr : function(num){            arr.push(num);        }    }}();//立即执行

application.registerarr(5);
console.log(application.getarr()); //[1, 2, 3, 4, 5] 

我们也可以使用Array,Function等来创建对象,这里就不过多阐述了。

第二类,为自定义引用类型,通过自定义引用类型来创建对象。我们通常喜欢将构造函数和原型模式组合来定义引用类型

function Klass(){    this.name = ‘xiaodao‘;}Klass.prototype.setName = function(name){    this.name = name;}Klass.prototype.getName = function(){    console.log(this.name);}/*实例化*/var instance1 = new Klass();var instance2 = new Klass();

然而,很多人会有这样一个疑问,为什么不单独使用构造函数或者是单独使用原型模式,很长一段时间我也没搞明白,现在我尝试着去解释。

技术分享

如果单独使用构造函数的话,当实例化时,每个实例会各自创建一个属于自己的方法,但是每个方法所实现的功能都是一样的,所以那何必白白浪费内存呢,倒不如在原型对象中创建一次方法,让所有实例共享就好了;如果单独使用原型模式的话,当实例化时,每个实例就没有了自己私有的属性,当修改instance1的name属性时,instance2的name属性也会被修改。所以最后让构造函数创建属性,用原型模式创建方法。

 

创建对象