JS构造函数模式

165 阅读1分钟

构造函数是可以创建特定类型对象的函数,可以接受参数定义函数成员。如果之前做过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 又被调用一次 (分享之前我先推荐下我自己的web前端学习交流群:675498134,不管你是小白还是大神,我都欢迎你们进群交流,不定期分享干货,包括我自己整理的最新的前端资料和教程送给大家,欢迎初学和进阶中的小伙伴,一起学习一起交流,共同进步。)

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

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

解决方案二:

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