首次创建JavaScript API
我第一次为响应性网页/web应用程序(移动设备)创建了一个商业API 我是新来的,不幸的是,我一个人工作,对Javascript(一个复杂的故事)也不熟悉 我只是想知道,是否有业内人士可以就以下形式的“获取”电话提供他们的专业意见: 函数调用:首次创建JavaScript API,javascript,jquery,api,Javascript,Jquery,Api,我第一次为响应性网页/web应用程序(移动设备)创建了一个商业API 我是新来的,不幸的是,我一个人工作,对Javascript(一个复杂的故事)也不熟悉 我只是想知道,是否有业内人士可以就以下形式的“获取”电话提供他们的专业意见: 函数调用: var printList = function(lid,options,get) { var list = $("ul#"+lid); var promise = get(options); promise.promise()
var printList = function(lid,options,get) {
var list = $("ul#"+lid);
var promise = get(options);
promise.promise().then(
function(response) {
var items = response;
list.empty();
$.each(items, function(item,details) {
var ul = $('<ul/>');
ul.attr('id', lid+'_'+details.ID);
var li = $('<li/>')
.text(details.ID)
.appendTo(list);
ul.appendTo(list);
$.each(details,function(key,value) {
var li = $('<li/>')
.text(key+': '+value)
.appendTo(ul);
});
});
}
);
}
var printList=函数(lid、options、get){
var列表=$(“ul#“+lid);
var promise=get(期权);
那就答应吧(
功能(响应){
var项目=响应;
list.empty();
$。每个(项目、功能(项目、详细信息){
var ul=$(“
”);
ul.attr('id',lid+''.'详细信息.id);
变量li=$(“”)
.text(details.ID)
.附件(清单);
ul.附录(列表);
$。每个(详细信息、功能(键、值){
变量li=$(“”)
.text(键+':'+值)
.附录(ul);
});
});
}
);
}
我们将非常感谢您的任何意见或指导。我本身不是该行业的专业人士,但我认为有几件事可以改进您的代码:
var printList = function(lid, options, get) {
var promise = get(options);
var list = $("#" + lid);
promise.success(function(response) {
var data = response;
list.empty();
$.each(data, function(item, details) {
var ul = $('<ul/>').attr('id', lid + '_' + details.ID);
var li = $('<li/>').text(details.ID).appendTo(list);
ul.appendTo(list);
$.each(details, function(key, value) {
var li = $('<li/>').text(key + ': ' + value).appendTo(ul);
});
});
});
}
- 根据通用惯例设置格式。如果没有适当的缩进,很难看到代码在做什么
- 只需使用
而不是$(“#”+lid)
。开头的$(“ul”+lid)
没有添加任何歧义消除,因为ul
属性必须是唯一的,这只会延长解析时间id
- 在这种情况下,请删除本地存储。并非所有浏览器都支持它,据我所知,这里不需要它。直接使用响应返回的数据即可
var printList = function(lid, options, get) {
var promise = get(options);
var list = $("#" + lid);
promise.success(function(response) {
var data = response;
list.empty();
$.each(data, function(item, details) {
var ul = $('<ul/>').attr('id', lid + '_' + details.ID);
var li = $('<li/>').text(details.ID).appendTo(list);
ul.appendTo(list);
$.each(details, function(key, value) {
var li = $('<li/>').text(key + ': ' + value).appendTo(ul);
});
});
});
}
var printList=函数(lid、options、get){
var promise=get(期权);
变量列表=$(“#”+lid);
承诺、成功(功能(响应){
var数据=响应;
list.empty();
$。每个(数据、功能(项目、详细信息){
var ul=$('
').attr('id',lid+'.+details.id);
var li=$(“”).text(details.ID).appendTo(list);
ul.附录(列表);
$。每个(详细信息、功能(键、值){
var li=$(“”).text(key+”:“+value).appendTo(ul);
});
});
});
}
编辑:编辑后的代码对我来说很好,除了次要的
ul
之外。还有一些建议可以让你的API看起来更专业一些:
1-名称空间
使用名称空间将代码整齐地打包在自己的空间中,这样就不会与页面上的其他函数定义冲突。从以下内容开始:
window.MyNamespace = {};
MyNamespace.get = function(qid, pid) {
//things
};
MyNamespace.anotherFunction = function() {
//other stuff
}
如果您的代码开始变大,您可以将整个代码封装在一个闭包中。您还可以将其全部定义为类,然后实例化一次,以使代码更整洁,并允许您存储实例变量并调用this.anotherFunction()。如果你愿意,我也可以提供这些例子
2-API方法签名
我更喜欢看到的另一件事是函数的显式参数,而不是函数get(params)样式的代码。使参数显式可以使代码更易于阅读和理解,并阻止特别的黑客行为,这在编写API时尤为重要。这是一个仅仅因为你能,并不意味着你应该
3-配置
尝试将ID和URL之类的内容移动到变量中,以使代码更易于重用和使用
一般来说,Javascript开发人员在查看API文档之前会先查看代码,因此您可以采取任何措施使API函数名和参数名更具表现力和自我记录,这将有助于他们。这种问题可能更适合于感谢,我肯定会检查它除了codereview可能是合适的之外,您的代码确实有问题。getSample使用异步Ajax调用,因此无法从函数返回值。您需要引入回调函数作为参数或返回承诺对象。代码更新为包含“承诺”谢谢。我将进行建议的更改。.promise().then()和.success()功能之间有什么真正的区别吗?或者两者中的任何一个会起作用?这是有区别的,但在这种情况下,我认为它们在功能上是相同的。1-在编辑OP之前,我实际上有名称空间。然而,目前我不赞成使用它们,因为我制定了一个坚实的结构,以允许歧义。2-如上所述,这些特定的get方法被模糊地调用。我曾经认为,在诸如printList()3这样的UI调用中,硬输入参数会使委托难以使用-您将在$.ajaxURL属性中看到一个“URL”变量,这是一个超出范围的配置变量集。我将仔细考虑硬类型参数的想法,并尝试找到一种优雅的方法来重新引入名称空间:)