美文网首页
创建对象的方法

创建对象的方法

作者: 菜鸟的觉醒 | 来源:发表于2018-03-19 14:40 被阅读0次

备注:这里对于用字面量形式和Object构造函数就不做过多的声明

工厂模式

    function createPerson (name,age,sex) {  
        var o = new Object();
        o.name = name;
        o.age =  age;
        o.sex = sex;
        return o;
    }  
    var person1 = createPerson('sam',20,'man');

这种方式本质上其实就是对Object构造函数多加了一层封装

构造函数模式

    function Person(name,age,sex){  
        this.name = name;
        this.age = age;
        this.sex = sex;
        this.say = function(){
            return 'say hello'
        }
    }
    //创建
    var person = new Person('sam',20,'man')

使用构造函数的缺点是每创建一次实例,函数内部的方法都会重新构建一次,对于私有方法来说这是可行的,但对于一些公用的实现相同功能的方法频繁去实例化是没有必要的。

原型模式

    function Person(){};
    Person.prototype.name = 'name';
    Person.prototype.age = 'age';
    Person.prototype.job = ['student','teacher'];
    var person = new Person();  

原型模式的问题是所有实例共享属性和方法,对于只是添加一个原型上存在的同名属性而言,是会隐藏原型上的属性,这个时候的影响不会特别大。但是对于引用类型的数据,如果只是在修改数据,就会带来比较大的影响。比如:

    var person1 = new Person();
    var person2 = new Person();
    person1.job.push('leader');  
    //person1.job: 'student','teacher','leader  
    //person2.job: 'student','teacher','leader'

如上所示,在person1的实例上我们修改了job数组,此时打印出的person2的job也发生了改变,这可能并不是我们所希望看到的。通常来说我们都希望每个实例都有自己的属性定义,这个时候单纯使用原型模式就不是很适合。

使用构造函数模式和原型模式的组合

    function Person(name,age,sex){
        this.name = name;
        this.age = age;
        this.sex = sex;
    }
    Person.prototype.getName = function(){
        return 'hello' + this.name;
    }
    var person = new Person('sam',20,'sex');
    person.getName(); // hello sam

这种方式结合了构造函数和原型方式的优点,私有方法定义在函数内部,公有属性和方法定义在原型上。避免了原型造成属性共享的问题,也加强了对象的扩展性,这也是目前使用最广泛的创建自定义函数类型的方式。

相关文章

  • [Effective Java] (01)静态工厂方法代替构造器

    1. 创建对象 1.1 构造方法创建对象 在Java中,创建对象常用的方法是通过公有的构造方法创建;如:Boole...

  • 原型链相关问题

    创建对象有几种方法 使用对象字面量的方式创建 使用构造函数创建对象 使用Object.create()方法创建 原...

  • js原型链基础

    创建对象的方法: 面向对象

  • JS基础 - 创建对象

    一、创建对象 方法一 直接创建字面量 方法二 声明对象字面变量,向对象添加新成员 二、定义对象函数 方法一 对象字...

  • ThinkPHP3.2-CURD操作

    数据创建 create方法创建数据对象 create()方法支持从其他方式创建数据对象,例如,其他数据对象或者是数...

  • 创建对象方法

    (1)工厂模式 (2)构造函数模式 (3)原型模式 (4)组合使用构造函数模式和原型模式 (1)工厂模式:缺点:不...

  • Effective Java一书笔记

    对象的创建与销毁 Item 1: 使用static工厂方法,而不是构造函数创建对象:仅仅是创建对象的方法,并非Fa...

  • 创建对象的方法

    备注:这里对于用字面量形式和Object构造函数就不做过多的声明 工厂模式 这种方式本质上其实就是对Object构...

  • 创建对象的方法

    某面试题:Java中创建实例化对象有哪些方式?①最常见的创建对象方法,使用new语句创建一个对象。②通过工厂方法返...

  • 创建对象的方法

    字面量创建对象 工厂方法 构造函数 使用构造函数的缺点: 每次创建示例方法都需要重新创建一遍。这时候,改造下构造函...

网友评论

      本文标题:创建对象的方法

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