首先,不,我不是要为我的JavaScript代码创建任何类似Java的界面.我已经看到了这些问题,虽然我仍然是JavaScript的相对新手,但是我的思绪在这个想法中畏缩了(IMO).
但是,我很好奇interface关键字的实际用途是什么.例如,Math是一个包含定义(但不是实现)的接口.我相信(并且可能完全错误)这些是为语言的定义者提供一种手段来强制执行在各种JavaScript引擎中实现的一组行为.那是对的吗?
此外,我希望有一个包含一堆实用方法的"静态类".我喜欢Math.sqrt(3)有一个外部命名空间('Math'),它是大写的,并且有许多逻辑上类似的方法和值.也许只是我的Java/Ruby背景让我想要分组对象的资金.这是不好的形式?
var ShapeInspections = {
isSymmetrical: function (s) {
// determine if shape is symmetrical
},
numAngles: function (s) {
// return the number of angles
}
}
Run Code Online (Sandbox Code Playgroud)
一个纯粹人为的例子,但用这种方式命名"模块"是否反对惯用?
好的,与其他答案一样,您知道关键字界面在Javascript世界中没有真正的用例.
您的Math示例让我怀疑您正在讨论一种名为Module Pattern的设计模式,该模式广泛用于确定Javascript代码.有许多方法可以使代码模块化.例如,就像OddDev回答你一样,着名的Prototype Pattern可以以模块化方式嵌入你的代码(就像你的Math例子一样).以下是Revealing Prototype Pattern示例以及私有变量和函数,以提供额外的灵活性:
/* Example from:
http://www.innoarchitech.com/scalable-maintainable-javascript-modules */
var myPrototypeModule = (function (){
var privateVar = "Alex Castrounis",
count = 0;
function PrototypeModule(name){
this.name = name;
}
function privateFunction() {
console.log( "Name:" + privateVar );
count++;
}
PrototypeModule.prototype.setName = function(strName){
this.name = strName;
};
PrototypeModule.prototype.getName = function(){
privateFunction();
};
return PrototypeModule;
})();
Run Code Online (Sandbox Code Playgroud)
但这不是全部.其他选项包括Scoped模块模式,POJO模块模式等等.看看如何编写高度可扩展和可维护的JavaScript:模块,它有一个非常简单但非常全面的示例.
到目前为止,我们谈到了简单的Javascript.如果您能够在代码中使用库,那么可以使用诸如Requirejs,CommonsJS等令人惊奇的库来帮助您实现开箱即用的功能.看看Addy Osmani关于用AMD,CommonJS和ES Harmony编写模块化JavaScript的帖子.
interfacejavascript中的关键字是FutureReservedWord,因此尽管将来的规范可能会更改,但它现在绝对不执行任何操作。(请参阅ECMAScript 5.1,第7.6.1.2节)。在ES6草案中,这也是相同的。
对于您的模块,这是一个完美的惯用解决方案。“命名空间”函数始终是一个好主意,因为它可以使全局范围保持尽可能的干净。
| 归档时间: |
|
| 查看次数: |
9276 次 |
| 最近记录: |