JavaScript中的构造函数和工厂函数

JavaScript中的工厂函数

 1 function crateHero (name,blood,weapoon) {
 2             var o = new Object();
 3             o.name = name;
 4             o.blood = blood;
 5             o.weapoon = weapoon;
 6             o.attch = function () {
 7             console.log(this.name+"用"+this.weapoon+"进行了攻击");
 8         }
 9         return o;
10         }
11         var hero = new crateHero("Tom","10","foot");
12         hero.attch();

JavaScript中的构造函数:

 1 function Hero(name,blood,weapon) {
 2             this.name = name;
 3             this.blood = blood;
 4             this.weapon = weapon;
 5             this.attack = function () {
 6                 console.log(this.name+"用"+this.weapon+"进行攻击");
 7             }
 8         }
 9 var HeroOne = new Hero("刘备",100,"雌雄双股剑");
10 HeroOne.attack();

以上两个代码片段其实都是实现相同的功能,表面上看两个的区别只是第一个工厂函数要复杂一些,第二个要简单一些。其实最最重要的一点是工厂函数它没有办法解决对象的识别问题(即怎么知道一个对象的类型),而构造函数就很好的解决了这个问题每一个实例都指向了创建该实例的构造函数.,就像下面的列子:

1 console.log(HeroOne instanceof Hero); 

打印值为true,而工厂函数只能是object

其实构造函数可以理解为简化的工厂函数,下面是构造函数的运行分析,不难可出其原理和工厂函数几乎一致:

  1. 在内存中创建一个空对象(没有体现出来)
  2. 设置构造函数的this,让this指向刚刚创建的对象
  3. 执行构造函数的代码
  4. 返回对象(没有体现出来)

Ps:个人理解若有错误欢迎指正。