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

Posted liyangfei

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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:个人理解若有错误欢迎指正。

 

以上是关于JavaScript中的构造函数和工厂函数的主要内容,如果未能解决你的问题,请参考以下文章

javascript工厂模式和构造函数模式创建对象

JavaScript创建对象之单例工厂构造函数模式

javascript工厂函数(factory function)vs构造函数(constructor function)

构造函数vs工厂函数

JavaScript 创建对象 (工厂模式构造函数模式原型模式组合使用构造函数模式与原型模式)

javascript--面向对象(工厂模式,构造函数,原型模式)