JS 构造函数和工厂模式创建对象的方式

工厂模式

 1 function createPerson (name,age,job) {
 2           var o=new Object();
 3           o.name=name;
 4           o.age=age;
 5           o.job=job;
 6           o.sayName=function(){
 7               alert(this.name);
 8           };
 9           return o;
10       };
11       var person1=createPerson("Terry",24,"Software Engineer");
12       person1.sayName();
13       var Person2=createPerson("Terry2",24,"Software Engineer2");
14       person2.sayName();

构造函数模式

 1  function Person(name,age,job){
 2           this.name=name;
 3           this.age=age;
 4           this.job=job;
 5           this.sayName=function(){
 6               alert(this.name);
 7           }
 8       }
 9       var person1=new Person("Terry",23,"Engineer Software");
10       person1.sayName();

  person1对象有一个constructor属性,该属性指向Person,constuctor属性最初是用来标识对象类型的。但是 instanceof操作符要更可靠一些。

1 alert(person1 instanceof Object);//ture
2 alert(person1 instanceof Person);//ture

  自定义构造函数意味着将来可以将它的实例标识为一种特定的类型,这正是构造函数模式胜过工厂模式的地方。
  构造函数也是函数,任何函数只要通过new操作符来调用,那它就可以做为构造函数;而任何函数不通过new操作符来调用,那它跟普通函数也不会有什么两样。

1、当做构造函数来使用

1 var person=new Person("Terry",23,"Software Engineer");
2 person.sayName();

2、作为普通函数来调用

1 Person("Terry",25,"Doctor");
2 window.sayName();

3,在另一对象作用域中调用

1 var o=new Object();
2 Person.call(o,"Terry",23,"Nurse");
3 o.sayName();

  当在全局作用域中调用一个函数时, this对象总是指向Global对象(在浏览器中就是window对象)。

  因此,在调用完函数之后,可以通过window对象来调用sayName()方法,并且还返回了"Terry"。

  最后,也可以使用 call()(或者 apply())在某个特殊对象的作用域中调用 Person()函数。

  这里是在对象o的作用域中调用的,因此调用后 o 就拥有了所有属性和 sayName()方法。

构造函数的问题

  ...

  ...

时间: 2024-07-28 23:50:28

JS 构造函数和工厂模式创建对象的方式的相关文章

JS 设计模式(工厂模式环境搭建)

<!--引入的核心JS文件--> <script type="text/javascript" src="CommonUtil.js"></script> <script type=text/javascript charset=utf-8> <!--JS设计模式(工厂模式)--> //搭建一个工厂环境 //卖车店 function CarShop(){}; CarShop.prototype={ cons

js设计模式:工厂模式、构造函数模式、原型模式、混合模式

一.js面向对象程序 var o1 = new Object(); o1.name = "宾宾"; o1.sex = "男"; o1.age = "27"; o1.msg = function(){ console.log("姓名:"+this.name+"  性别:"+this.sex+"  年龄:"+this.age); } var o2 = new Object(); o2.nam

JS设计模式--简单工厂模式

在JS中创建对象会习惯的使用new关键字和类构造函数(也是可以用对象字面量). 工厂模式就是一种有助于消除两个类依赖性的模式. 工厂模式分为简单工厂模式和复杂工厂模式,这篇主要讲简单工厂模式. 简单工厂模式:使用一个类来生成实例. 复杂工厂模式:使用子类来决定一个成员变量应该是哪个具体的类的实例. 简单工厂模式: 常用对象方法创建和调用 var BallShop = function(){}; BallShop.prototype = { sellBall : function(model){

js之简单工厂模式

简单工厂模式是由一个方法来决定到底要创建哪个类的实例, 而这些实例经常都拥有相同的接口. 这种模式主要用在所实例化的类型在编译期并不能确定, 而是在执行期决定的情况. 说的通俗点,就像公司茶水间的饮料机,要咖啡还是牛奶取决于你按哪个按钮. e.g. var BicycleShop = function(){}; BicycleShop.prototype = { sellBicycle : function( model ){ var bicycle; switch( model ){ case

JS设计模式之工厂模式

简单工厂模式 又叫静态工厂方法:由一个工厂对象决定用那一种类来创建产品,主要用来创建同一类对象,是类的实例化的包装. var PlayBaseketball = function () { this.neededPeople = 15; }; PlayBaseketball.prototype.rule = function () { console.log('运球,传球,投篮,'); }; var playFootball = function () { this.neededPeople =

javascript——工厂模式创建对象

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" lang="en"> <head> <meta http-equiv="Content-Type"

JS “eval智能” 工厂模式

<script> var Shop = function () { this.name = function () { document.write("商店的名字 <br/>"); }, this.local = function () { document.write("商店的位置 <br/>"); } }; var ToolShop = function () { ToolShop.convertASThis.construc

node.js的exprots工厂模式

工厂类: /** * Created by zzq on 2015/5/15. */ module.exports = function(){ this.getProduct = function(){ console.log('重写这个方法获得相应的产品对象!'); } } 产品A: /** * Created by zzq on 2015/5/15. */ var product = require('./product'); var util = require('util'); var

JavaScript面向对象OOM 2(JavaScript 创建对象的工厂模式和构造函数模式)

??在创建对象的时候,使用对象字面量和 new Object() 构造函数的方式创建一个对象是最简单最方便的方式.但是凡是处于初级阶段的事物都会不可避免的存在一个问题,没有普适性,意思就是说我要为世界上(程序中)的所有使用到的对象都使用一遍 var xxx = {} ,对于'懒惰'的程序员来讲是不可以接受的.即便你能接受这种创建的方式,也无法保证将所有对象归类这一哲学问题. ??由此,优秀的程序员们利用现有的规则,创造出了一种种优秀的解决方案 -- 这些优秀的解决方案统称为设计模式. ??在 J