zoukankan      html  css  js  c++  java
  • 创建对象

      为什么要讲创建对象?因为这实在是太重要了!当我们需要使用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属性也会被修改。所以最后让构造函数创建属性,用原型模式创建方法。

  • 相关阅读:
    叶问14
    叶问13
    叶问12
    叶问11
    叶问10
    叶问9
    Java三种循环之间的区别
    利用Java对象数组制作简易学生管理系统
    什么叫java方法重载?
    Java编译器的常量优化
  • 原文地址:https://www.cnblogs.com/wang-jiang/p/4188562.html
Copyright © 2011-2022 走看看