我有一些像这样的代码:
(function() {
'use strict';
angular.module('outApp.core')
.factory('socket', socketDataService);
function socketDataService() {
var service = {
openSocket: openSocket,
closeSocket: closeSocket,
getUpdates: getUpdates,
sendUpdates: sendUpdates,
};
return service;
function openSocket() {
var contextPath = document.location.href.split('/#')[0];
var sock = new SockJS(contextPath + '/api/cart');
var stompClient = Stomp.over(sock);
stompClient.connect({}, function(frame) {
console.log('Connected ' + frame);
stompClient.subscribe("/app/cart", {}, { customerId: "4654654", cartId: "54654" });
});
}
开头有一个名为service
的JS对象中显示的其他命名函数,但为了简洁,我将它们排除在外。
我正在尝试使用工厂构造函数授予对service
对象中提到的函数的访问权限,该构造函数应该是可注入的,因此可以在我们的整个应用程序中访问。
我有两个问题:这是定义和返回方法的正确方法吗?
我知道我可以定义:
var service.method = function () {
//do stuff
}
var service.anothermethod = function () {
// do other stuff
}
return service;
但为了清晰,可读性和风格,我们选择这样做。我看到另一位开发人员是第一种方式,但我不清楚发生了什么。
下一个问题:如何在函数中访问并测试这些方法?我在工厂结束时设置了debugger
,但我无法在控制台中看到这些方法。
谢谢!
答案 0 :(得分:1)
这样做:
function foo() {
bar();
function bar () {
[...]
}
}
与此基本相同:
function foo() {
var bar = function () {
[...]
};
bar();
}
函数只是一种可以分配的对象,作为参数传递给其他函数等。不要认为是像Java一样的方法。
你提到的两种方式都很好。虽然第二种方式没有“var”:
service.method = function () {
//do stuff
};
您只需设置对象的属性,就像使用int:
一样service.foo = 42;
除此之外,我不确定你在问什么。