JS构造函数模式

构造函数是可以创建特定类型对象的函数,可以接受参数定义函数成员。如果之前做过java比较好理解,举个例子:

function exampleFunction(arg1, arg2, arg3){
  this.arg1 = arg1;
  this.arg1 = arg1;
  this.arg1 = arg1;
  this.output = function(){
    console.log('walk' + arg3);
  }
}

  用法是用new关键字创建实例:

var instance1 = new exampleFunction(12,32,90);
instance1.output()   //walk 90

  需要注意的是,如果不用new会出现this被绑定到了window对象,上代码:

var instance2 = exampleFunction(1,2,3);
console.log(typeof instance2)   //undefined
console.log(windows.output())   //walk 3

  有时候不想用new关键字,但是还是想实例化为exampleFunction,解决方式如下:

function exampleFunction(arg1, arg2, arg3){
  if(!(this typeof exampleFunction)) {
   return  new exampleFunction(arg1, arg2, arg3);
  }
  this.arg1 = arg1;
  this.arg1 = arg1;
  this.arg1 = arg1;
  this.output = function(){
    console.log('walk' + arg3);
  }
}

  上述构造函数用起来调用output的时候每次都需要定义一个函数,比较占用内存,解决方式两种:

var a = new exampleFunction(1,2,3);
console.log(a.output())   //output function 被调用一次
var b = new exampleFunction(4,5,6)
console.log(b.output())    //output function 又被调用一次


解决方案一:
定义一个walk function,将其赋值给output,这样只用定义一次,但可多次调用
walk() {
   console.log('walk' + this.arg3);
}

构造函数里面this.output替换为this.output = walk;

解决方案二:

使用prototype,
exampleFunction.prototype.output = function() {
  console.log('walk' + this.arg3);
}

  

posted @ 2017-12-01 08:22  better_fly  阅读(950)  评论(0编辑  收藏  举报