如果我有
var test = {
return {
foo: function() {
return 1
},
sub: {
bar: function() {
var foo = this.foo() // <--- here, does obviously not work
}
}
}
}
从foo()
内访问sub.bar()
的推荐和最佳方法是什么?
为澄清起见,我想将angularjs服务分成多个部分。
“真实”代码:
angular.module('myApp').factory('Service' function() {
return {
foo: function() {
return 1
},
sub: {
bar: function() {
var foo = this.foo() // <--- here, does obviously not work
}
}
}
})
答案 0 :(得分:2)
这不行:
return {
foo: function() {
return 1
}
}
您需要删除该return
语句,并且可以在函数bar
中使用变量foo
的名称访问函数test
,如下所示:{{1 }}
test.foo()
另一种方法是使用函数var test = {
foo: function() {
return 98989;
},
sub: {
bar: function() {
var foo = test.foo();
console.log(foo);
}
}
};
test.sub.bar();
,但功能过于强大:
bind
现在,您可以声明变量var test = {
foo: function() {
return 98989;
},
sub: {
bar: function() {
var foo = this.foo(); // Using the object 'this'
console.log(foo);
}
}
};
test.sub.bar.bind(test)();
并使用该变量:
service
答案 1 :(得分:2)
由于您使用的是angular factory,因此可以使用Revealing Module Pattern:
angular.module('myApp').factory('Service' function() {
function foo() {
return 1
}
var sub = {
bar: function() {
var foo = foo()
}
}
return {
foo: foo,
sub: sub
}
})