在Javascript中实现依赖注入的共享思想

现在每个模块都是模块化的,前端的Javascript也不例外,每个模块负责某个功能,模块与模块之间是相互依赖的。那么问题是:Javascript的依赖注入是如何实现的(javascript的依赖注入,主要框架有相应的实现,这里只学习实现这个想法)

下列要求如下:

假设已经定义了服务模块键值集合,函数是一个新的服务,而参数列表是一个服务依赖项。

复制代码代码如下所示:

无功服务= { ABC:123、定义:456、酥油:789 }; / /假设已在一些服务定义

功能服务(ABC,GHI){

this.write =函数(){

console.log(ABC);

console.log(GHI);

}

}

功能激活剂(功能){

var obj;

实现

返回对象;

}



解决这个想法:

通过某种机制(反射)取出的函数定义的参数列表,它指定一个接一个。然后通过某种机制(激活)函数被实例化。

Solution:

首先,获取函数的参数列表:

如何获得参数列表我首先想到的是反射机制。Javascript中有反射吗这是应该的,我只知道使用eval(STR)的功能,但它似乎没有得到参数列表的相关实现。看func.arguments定义,它只有在调用函数传递参数,并不能满足要求。

Can that get the list of parameters by processing the string after func.toString ()

试试看:

复制代码代码如下所示:

功能getfuncparams(功能){

VaR(= func.tostring比赛。比赛( / ^功能 * { ^ )(} * ( *({ ^ )}×), / m));

如果(比赛matches.length > 1)

返回匹配{ 1 }替换。(Split);

返回{ };

};



此时,将获得函数参数列表数组。

两。根据参数列表查找依赖项:

获得一个参数列表,即获得一个依赖列表,并且很容易将依赖项作为参数传递。

复制代码代码如下所示:

var参数= getfuncparams(功能);

(我在对VaR参数){

参数{我} = { } } {我服务参数;

}



三。传递依赖项参数并实例化:

我们知道有Javascript的呼叫func.constructor(thisarg,{ { {精氨酸,精氨酸,精氨酸,{…}为(thisarg,args)和应用…)两种功能都能实现的功能操作的实例,调用函数的第一个参数是指针,和其余的参数列表。这是适用于已知函数参数列表的情况下使用的。它不能满足我的需要。第一个参数是这个指针。第二个参数是参数数组。当它被调用时,它自动将一个参数列表分配给函数,它刚好满足我的需要。

代码可能如下所示:

复制代码代码如下所示:

功能激活剂(功能){

var obj = { };

Func.apply(obj参数);

返回对象;

}



在这一点上,我们可以创建函数的实例并传递函数所需的参数。

四。打印并测试它。

完整的代码:

复制代码代码如下所示:

VaR

已经定义了一些假设。

服务= { { ABC:123、定义:456、酥油:789 },

获取函数列表(在列表中)

getfuncparams =函数(函数){

VaR(= func.tostring比赛。比赛( / ^功能 * { ^ )(} * ( *({ ^ )}×), / m));

如果(比赛matches.length > 1)

返回匹配{ 1 }。替换。(Split);

返回{ };

},

根据参数列表(列表/依赖)填充参数(依赖)

setfuncparams =函数(参数){

(我在对VaR参数){

参数{我} = { } } {我服务参数;

}

返回参数;

};

激活器

功能激活剂(功能){

var obj = { };

Func.apply(obj,setfuncparams(getfuncparams(功能)));

返回对象;

}

定义新服务

功能服务(ABC,GHI){

this.write =函数(){

console.log(ABC);

console.log(GHI);

}

}

实例化服务和方法

无功服务=激活(服务);

service.write();



控制台已成功打印!