JS设计模式——函数定义

第一阶段:直接定义函数

//定义
funtion a(){
//do
}
funtion b(){
//do
}
funtion c(){
//do
}
//调用
a();

以上方法相当于定义了一堆全局变量,与下面的方式相同

//定义
var a=function(){
//do
}
var b=function(){
//do
}
var c=function(){
//do
}
//调用
a();

这种定义全局变量的方法,在团队开发时,可能会被他人覆盖。
为了减少覆盖的风险, 可以创建一个对象,将函数放到对象中

第二阶段:对象收编函数

//定义
var obj={
a:function(){//do},
b:function(){//do},
c:function(){//do}
}
//调用
obj.a();

或者

//定义
var obj=function(){};
obj.a=function(){//do};
obj.b=function(){//do};
obj.c=function(){//do};
//调用
obj.a();

此时可以使用对象进行函数的调用,但是重新定义的对象,无法进行函数的使用。

var obj2=new obj();
obj2.a();//报错。此时obj2并没有a方法

为了支持新定义的对象进行方法的调用,将函数放到对象内

第三阶段:对象包含函数

// 定义
var obj=function(){
  return {
    a:function(){//do},
    b:function(){//do},
    c:function(){//do}
   }
}
//使用
var o1=obj();
o1.a();
var o2=obj();
o2.a();

以上方法虽然可以实现,但不是真正意义上的类的创建,创建出的o1,o2跟对象obj没有关系
为了表示创建出来的对象有关系,使用类创建

第四阶段:类对象

//定义
var obj=function(){
  this.a=function(){//do};
  this.b=function(){//do};
  this.c=function(){//do};
}
//调用
var o1=new obj();
o1.a();
var o2=new obj();
o2.a();

这种方式创建对象的时候,新创建的对象都会对类的this的属性进行复制,新建的对象都有自己的方法,消耗太大。
为了减少消耗,使用prototype

第五阶段:原型对象

// 定义
var obj=function(){};
obj.prototype.a=function(){//do};
obj.prototype.b=function(){//do};
obj.prototype.c=function(){//do};
// 调用
var o1=new obj();
o1.a();
var o2=new obj();
o2.a();
posted @ 2021-08-16 23:14  wl夏白  阅读(58)  评论(0)    收藏  举报