angularjs 工厂内部函数不依赖于工厂?
angularjs factory internal functions not factory dependend?
我想在我的模块中有 2 个 classes(工厂)
angular.module('starter.services', [])
.factory("TPreferences",function($cordovaSQLite){
_set = function(pName, pValue){
console.log("Setting: "+pName+":"+pValue);
}
_addList = function(pList){
for(var p=0; p < pList.length; p++)
{
_set(pList[p].name, pList[p].value);
}
}
return {
init: function(){
_addList(gSettings);
}
}
})
.factory("TDayList",function($cordovaSQLite){
_add = function(pName, pValue){
console.log("Day: "+pName+":"+pValue);
}
_addList = function(pList){
for(var p=0; p < pList.length; p++)
{
_add(pList[p].name,pList[p].value);
}
}
return {
init: function(){
_addList(gExampleDays);
}
};
});
问题:调用TPreferences.init() 时,会记录"Day:..."。
我假设“.factory(...)”-Stuff 是一个 class,其中 _addList 是一个受保护的函数,但似乎 _addList 似乎(至少在模块范围内)是全局的并且被覆盖尽管在不同的工厂中,但第二个定义具有相同的名称。
问题:当然,在这个例子中我可以简单地更改其中一个函数的名称,但我更愿意像 class 那样处理工厂,这样我就可以两次使用内部函数的名称。那么,最明智的做法是什么?
but it seems that _addList seems to be (at least module-wide) global and is overwritten by the second definition
当然是全局的,因为你声明的是全局的。没有声明的初始化成为全局变量。所以永远不要忘记正确声明变量 (const
, let
, var
):
const _addList = function(pList) {
for (var p=0; p < pList.length; p++) {
_set(pList[p].name, pList[p].value);
}
}
您没有在您的工厂中使用 var
,这使得这些功能成为全球性的。使用 var 或者如果可以使用 ES6
,请使用 let
关键字:
.factory("TPreferences",function($cordovaSQLite){
var _set = function(pName, pValue){
console.log("Setting: "+pName+":"+pValue);
}
var _addList = function(pList){
for(var p=0; p < pList.length; p++)
{
_set(pList[p].name, pList[p].value);
}
}
return {
init: function(){
_addList(gSettings);
}
}
})
我想在我的模块中有 2 个 classes(工厂)
angular.module('starter.services', [])
.factory("TPreferences",function($cordovaSQLite){
_set = function(pName, pValue){
console.log("Setting: "+pName+":"+pValue);
}
_addList = function(pList){
for(var p=0; p < pList.length; p++)
{
_set(pList[p].name, pList[p].value);
}
}
return {
init: function(){
_addList(gSettings);
}
}
})
.factory("TDayList",function($cordovaSQLite){
_add = function(pName, pValue){
console.log("Day: "+pName+":"+pValue);
}
_addList = function(pList){
for(var p=0; p < pList.length; p++)
{
_add(pList[p].name,pList[p].value);
}
}
return {
init: function(){
_addList(gExampleDays);
}
};
});
问题:调用TPreferences.init() 时,会记录"Day:..."。 我假设“.factory(...)”-Stuff 是一个 class,其中 _addList 是一个受保护的函数,但似乎 _addList 似乎(至少在模块范围内)是全局的并且被覆盖尽管在不同的工厂中,但第二个定义具有相同的名称。
问题:当然,在这个例子中我可以简单地更改其中一个函数的名称,但我更愿意像 class 那样处理工厂,这样我就可以两次使用内部函数的名称。那么,最明智的做法是什么?
but it seems that _addList seems to be (at least module-wide) global and is overwritten by the second definition
当然是全局的,因为你声明的是全局的。没有声明的初始化成为全局变量。所以永远不要忘记正确声明变量 (const
, let
, var
):
const _addList = function(pList) {
for (var p=0; p < pList.length; p++) {
_set(pList[p].name, pList[p].value);
}
}
您没有在您的工厂中使用 var
,这使得这些功能成为全球性的。使用 var 或者如果可以使用 ES6
,请使用 let
关键字:
.factory("TPreferences",function($cordovaSQLite){
var _set = function(pName, pValue){
console.log("Setting: "+pName+":"+pValue);
}
var _addList = function(pList){
for(var p=0; p < pList.length; p++)
{
_set(pList[p].name, pList[p].value);
}
}
return {
init: function(){
_addList(gSettings);
}
}
})