JavaScript对象的创建之工厂方法

通过工厂的方式来创建Person对象,在createPerson中创建一个对象,然后为这个对象设置相应的属性和方法,之后返回这个对象

function createPerson(name, age){
    var obj = new Object();
    obj.name = name;
    obj.age = age;

    obj.say = function(){
        alert(this.name+","+this.age);
    }
    return obj;
}

var p1 = createPerson("Leon",22);
var p2 = createPerson("Ada",33);
p1.say();
p2.say();

alert(typeof p1); //object
alert(p1 instanceof Object); //true

使用工厂的方式,虽然有效的解决了类的问题,但是依然存在另外一个问题:我们无法检测对象p1和p2的数据类型,

通过typeof仅仅只能检测出object类型,如果希望使用instanceof来检测的话,无法确定检测的类型。

时间: 2024-10-29 19:05:35

JavaScript对象的创建之工厂方法的相关文章

创建型-工厂方法模式

1.工厂方法模式意图: 定义一个用于创建对象的接口,让子类决定实例化哪一个类.Factory Method使一个类的实例化延迟到其子类. 2.应用场景: 考虑一个榨汁机的应用场景.榨汁机可以用来制作苹果汁.西瓜汁.橘汁等,即榨汁机可以用来制作水果汁.但是,夏天的冷饮店中,为了提高制作水果汁的效率和防止味道互串等情况,可能需要分别准备三个水果榨汁机,分别用来生产苹果汁.西瓜汁.橘汁等. 3.工厂方法模式类图: 角色: Product:定义工厂方法所创建对象.如场景描述中的果汁. ConcreteP

JavaScript对象的创建总结

方式 缺点 优点 基于已有对象扩充属性和方法 不可重用,没有约束 无 工厂方法 检测不出是什么的实例 简单封装,可以传参 构造方法 每创建一个对象就有开辟存放方法的空间 能通过instanceof检测出实例类型,可以传参 原型方式 不能传参,属性共享 方法区共享 构造方法+原型 属性和方法分开放置 能传参,属性放构造方法中,方法放原型中 动态原型 推荐使用

java设计模式--创建模式--工厂方法

工厂方法定义: 1 工厂方法 2 3 概述 4 定义一个用于创建对象的接口,让子类决定实例化哪一个类.FactoryMethod使一个类的实例化延迟到其子类. 5 6 适用性 7 1.当一个类不知道它所必须创建的对象的类的时候. 8 9 2.当一个类希望由它的子类来指定它所创建的对象的时候. 10 11 3.当类将创建对象的职责委托给多个帮助子类中的某一个,并且你希望将哪一个帮助子类是代理者这一信息局部化的时候. 12 参与者 13 1.Product 14 定义工厂方法所创建的对象的接口. 1

JavaScript对象的创建之使用json格式定义

json: javascript simple object notation. json就是js的对象,但是它省去了xml中的标签,而是通过{}来完成对象的说明. 定义对象 var person = { name : "luogankun", //通过属性名:属性值来表示,不同的属性通过,来间隔 age : 25, say : function(){ alert(this.name + " , " + this.age); }//最后一个属性之后不能有, } pe

JavaScript对象的创建之基于构造方法+原型方式

为了解决原型所带来的问题,此处需要通过组合构造方法和原型来实现对象的创建,将属性在构造方法中定义,将方法在原型中定义.这种有效集合了两者的优点,是目前最为常用的一种方式. function Person(name,age,friends){ //属性在构造函数中定义 this.name = name; this.age = age; this.friends = friends; } Person.prototype = { constructor:Person, //方法在原型中定义 say:

【JavaScript】浅析JavaScript对象如何添加属性和方法

向JavaScript类中添加属性和方法,最直观的做法就是在类中定义属性和方法.JavaScript是一门弱语言,除了直接定义还可以用prototype来添加. 下面介绍从外部向JavaScript添加属性和方法的四种方法,首先定义一个类 function MyClass(){} 1,使用类名添加属性 MyClass.prototype.myname="吴兴国01"; 2,使用类名添加方法 MyClass.prototype.myfunc=function(){alert("

创建型 — 工厂方法模式(Factory Method)

引言:自己在项目中有这样一个代码逻辑,有一个接口,原来只有一个实现类,在创建它时就直接创建了.后来新增了需求,这个接口多了一个实现类.再对定义接口的实际对象时,需要根据传入的参数,判断到底利用哪一个实现类来创建.于是自己就在原来的代码处加了if-else,将对象的创建逻辑完全混杂在了原来代码处.当时自己觉得已经完美的解决了这个问题. 后来,请

JavaScript对象的创建之外部属性定义方式(基于已有对象扩充其属性和方法)

var person = new Object(); person.name = "luogk"; person.age = 33; person.say = function(){ alert(this.name + " , " + this.age);//this表示的是调用的对象即person对象 } person.say(); 由于在js中并不存在类,所以可以直接通过Object来创建对象. 缺点:由于没有类的约束无法实现对象的重复利用,并且没有一种约定,在

JavaScript 对象的创建

Object类型是JavaScript中使用最多的一种类型.创建Object实例的方式有多种,接下来一一列举. 1. Object构造函数 var person = new Object();person.name = "Brittany";person.age = 23;person.job = "web front-end engineer";person.sayName = function() {    console.log(this.name);};pe