细节:js 创建对象的几种模式举例

智数逐影人
• 阅读 2251

工厂模式(不推荐)

var sayName = function(){
    return this.name;
};

function createPerson(name,age){
    var obj = {};
    obj.name = name;
    obj.age = age;
    obj.sayName = sayName;
    return obj;
}

var newPerson = createPerson("Oliver",18);
console.log(newPerson.sayName());
  1. 应该把方法放在函数的外面,避免重复创建该方法;

  2. 定义的不是构建函数,因该使用var 方法创建实例,而不是new 方法;

  3. 不要忘记在函数的最后return obj;

构造函数模式(不推荐)

var sayName = function(){
    return this.name;
};

function Person(name,age){
    this.name = name;
    this.age = age;
    this.sayName = sayName;
}

var newPerson = new Person("Oliver",18);
console.log(newPerson.sayName());
  1. 使用this指代,函数无需明确return;

  2. 应该把方法放在函数的外面,避免重复创建该方法;

原型模式(不推荐)

var sayName = function(){
    return this.name;
};

function Person(){};
Person.prototype.name = "Oliver";
Person.prototype.age = 18;
Person.prototype.sayName = sayName;

var newPerson = new Person("Oliver",18);
console.log(newPerson.sayName());
  1. 函数中不对属性进行定义而是用prototype;

组合使用构造函数模式和原型模式(推荐)

function Person(name,age){
    this.name = name;
    this.age = age;
};

Person.prototype.sayName = function(){
    return this.name;
};

var newPerson = new Person("Oliver",18);
console.log(newPerson.sayName());
  1. 将所有属性定义在函数中(构造函数方式);将所有方法定义在prototype中(原型方式);

动态原型模式(推荐)

function Person(name,age){
    this.name = name;
    this.age = age;
    if (typeof Person.sayName != "function"){
        Person.prototype.sayName = function(){
            return this.name;
        };
    }
};
var newPerson = new Person("Oliver",18);
console.log(newPerson.sayName());
  1. 这里判断属性是否为function 以避免重复创建;

点赞
收藏
评论区
推荐文章
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
待兔 待兔
1年前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
zdd小小菜鸟 zdd小小菜鸟
3年前
创建型-工厂模式 ( Factory Pattern )
创建型工厂模式(FactoryPattern)tex工厂模式(FactoryPattern)提供了一种创建对象的最佳方式工厂模式在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象工厂
Stella981 Stella981
4年前
List的Select 和Select().tolist()
List<PersondelpnewList<Person{newPerson{Id1,Name"小明1",Age11,Sign0},newPerson{Id2,Name"小明2",Age12,
Stella981 Stella981
4年前
JS 对象数组Array 根据对象object key的值排序sort,很风骚哦
有个js对象数组varary\{id:1,name:"b"},{id:2,name:"b"}\需求是根据name或者id的值来排序,这里有个风骚的函数函数定义:function keysrt(key,desc) {  return function(a,b){    return desc ? ~~(ak
Wesley13 Wesley13
4年前
Java描述设计模式(04):抽象工厂模式
一、抽象工厂模式1、生活场景汽车生产根据用户选择的汽车类型,指定不同的工厂进行生产,选择红旗轿车,就要使用中国工厂,选择奥迪轿车,就要使用德国工厂。2、抽象工厂模式1.抽象工厂模式:定义了一个interface用于创建相关对象或相互依赖的对象,而无需指明具体的类;2.抽象工厂模式可以
Stella981 Stella981
4年前
Javascript中创建函数的几种方法
//工厂函数模式//无法解决对象识别问题functionperson0(name,age,job){varobjnewObject();obj.namename;obj.ageage;obj.jobjob;returno
Wesley13 Wesley13
4年前
mysql select将多个字段横向合拼到一个字段
表模式:CREATE TABLE tbl_user (  id int(11) NOT NULL AUTO_INCREMENT,  name varchar(255) DEFAULT NULL,  age int(11) DEFAULT NULL,  PRIMARY KEY (id)
Stella981 Stella981
4年前
Python之设计模式
一、设计模式分类a、创建型模式简单工厂模式一、内容不直接向客户端暴露对象创建的实现细节,而是通过一个工厂类来负责创建产品类的实例。二、角色工厂角色(Creator)抽象产品角色(Product)具体产品角色(ConcreteProduct)
Wesley13 Wesley13
4年前
JS创建对象模式7种方法详解
创建对象的几种模式虽然Object构造函数或者字面量,都可以用来创建对象,但这些方式有明显的缺点:使用同一个接口创建很多对象,会产生大量的代码,于是,工厂模式诞生了1工厂模式工厂模式是广为人知的设计模式,抽象了创建具体对象的过程。在ES6的Class创建类之前,是无法创建类的,开发人员就发明了一种函数,用函数来封
Wesley13 Wesley13
4年前
C++ 常用设计模式(学习笔记)
设计模式1、工厂模式在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。工厂模式作为一种创建模式,一般在创建复杂对象时,考虑使用;在创建简单对象时,建议直接new完成一个实例对象的创建。1.1、简单工厂模式主要特点是需要在工厂类中做判断,从而创造相应的产品,当