是否有一个JavaScript库执行方法签名?

我想有一种方法来指定特定的Javascript方法都需要哪些属性,就应该搭配什么样的模式,以及如何,如果他们不回应。

这是因为它会导致大量的重复代码来检查在方法级别必需和可选参数。

就拿这个例子。 在这里,我想建立一个灯箱。 如果他们给我一个字符串,我将展示只是内容的灯箱。 如果他们给我一个选择的对象,我找了'标题'和'内容'。 那岂不是伟大的,是能够以某种标准化的方式来指定这个?

// Static method for generating a lightbox // callerOptions = '' //if sent a string, the lightbox displays it with no title // callerOptions = { // content: '' // required popup contents. can be HTML or text. // , title: '' // required title for the lightbox // , subtitle: '' // optional subtitle for lightbox // } lightbox = function (callerOptions) { if (!callerOptions) { log.warn(_myName + ': calling me without a message to display or any options won\'t do anything'); return; } // If they send us a string, assume it's the popup contents if (typeof(callerOptions) === 'string') { this.options = {}; this.options.content = callerOptions; // Otherwise assume they sent us a good options object } else { this.options = callerOptions; } _build(); _contentLoaded(); };

我很想能够使用一些图书馆中,我从来没有听说过做这样的事情:

// Maybe this is what it looks like with a method signature enforcement library lightbox = function (callerOptions) { TheEnforcer( , { valid: [ 'string' // assumes that it is testing type against arguments by convention , 'typeof([0].title) === "string" && typeof([0].content) === "string"' ] } }); // If they send us a string, assume it's the popup contents if (typeof(callerOptions) === 'string') { this.options = { 'content': callerOptions }; // Otherwise we know they sent us a good options object } else { this.options = callerOptions; } _build(); _contentLoaded(); };

有没有人见过一个Javascript库这样吗? 也许内置到1000 JS MV *框架之一?

编辑 :看起来这通常由MV *框架照顾。 Backbone.js的既有验证和它的模型的属性默认值。 我认为这些可以用来达到或接近达到,使用情况下,我在这里提出。

--------------解决方案-------------

(这是intented是一个评论,但它变得比预期更长。)

我理解这样的功能是有用的,但有时我相信应该尽可能避免。 而且我觉得ECMA标准不应该包括。

把你的例子:需要一个灯箱标题和内容。 为什么? 为什么不显示空灯箱,没有标题或内容? 这是一个像样的回退,在我看来。 如果你正在建设一个API,谁在使用它可以检查空的标题和内容,如果需要,只是不叫收藏功能。 还有,我不喜欢试图强制类型JS的想法。

我认为这是比jQuery的根本不同。 他们只是提供了一个可链接的包装对象(有一堆里面有用的方法),并有利于在一定编码/语法格式,这是大多数的jQuery。 它使语言看起来简单,不像类型和方法签名强制执行 - 绝对不是“简单的可以是”(对不起,这一点)。

我想有两个部分这一点,哲学/建筑和实施。

在哲学方面,我认为没有什么简单(我的API的用户,而不是对我来说,API开发人员),比描述是什么,是不是需要为每个方法明确的期望和错误消息。

在执行方面,这是问题是什么最初一下,我想我回答我自己的。 Backbone.js的'模型,特别是.validate部分,似乎满足这一需求相当不错。 我还没有使用过,但是这是到目前为止,我已经找到喜欢它的唯一的事情。

http://documentcloud.github.com/backbone/#Model-validate

编辑:另一种解决办法是编译的时候。 谷歌关闭编译器似乎很好地处理这个问题:https://developers.google.com/closure/compiler/docs/js-for-compiler

分类:JavaScript的 时间:2015-03-15 人气:0
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 0.598 (s). 10 q(s)