自己的JavaScript库的体系结构
Architecture for own JavaScript library
对于一个新项目,我需要写一个JavaScript库,但我不知道如何构建它。昨天我在stackoverflow上读了很多文章和问题。
我喜欢支持公共和私人功能和类。这是我的结果:
(function(window) {
var Library = Library || {};
// Library namespace
Library = (function() {
function privateFunc() {
return "I'm a private functon in Library.";
}
var privateClass = function(param) {
var _param = param;
}
return {
constructor: Library,
publicFunc: function() {
return "I'm a publicFunc functon in Library.";
}
};
})();
// String namespace
_namespace('String');
Library.String = (function() {
function privateFunc() {
return "I'm a private functon in Library.String.";
}
return {
constructor: Library.String,
publicFunc: function() {
return "I'm a publicFunc functon in Library.String.";
},
publicClass: function(param) {
var _param = param;
}
};
})();
// global function
function _namespace(name) {
...
}
// register libary
window.Library= window.$L = Library;
})(window);
这是构建图书馆的好方法吗?还是有更好的方法?我如何为我的privateClass/publicClass实现私有和公共函数?
感谢
javascript中没有私有/公共函数的概念。按照惯例,以下划线开头的函数被视为私有函数。
只是为了惹Raynos(我几年前写的):
私有、公共和静态变量
我们在对象中定义变量的方式决定了我们的对象有哪些方法可以访问这些变量。在JavaScript中,使用OO代码时有五个级别的方法和属性。
-
Private在对象内部声明为"var variableName"或"function functionName"。只能由其他专用或特权功能访问。
-
Public在对象内部声明为"this.variableName"。可以通过任何函数或方法进行更改。
-
在对象内部使用"this.functionName=function(){…}"声明的特权。可以由任何函数或方法访问,也可以调用引用或更改任何Private变量。
-
Prototype用"Class.protype.variableName"或"Class.protoype.functionName"声明。以这种方式声明的函数将可以访问任何公共变量或原型变量。尝试更改以这种方式创建的变量将在对象上创建一个新的公共变量,并且原型变量将不可用。
-
使用"Class.variableName"或"Class.functionName"进行静态声明。可以由任何函数或方法更改。这种方法很少使用。为了理解这些不同的级别,让我们看一个例子:
function Cat(name, color){
/*
Constructor: any code in here is run when the object is created
*/
Cat.cats++;
/*
Private variables and functions - may only be accessed by private or privileged functions.
Note that 'name' and 'color', passed into the Class, are already private variables.
*/
var age = 0;
var legs = 4;
function growOlder(){
age++;
}
/*
Public variables - may be accessed publicly or privately
*/
this.weight = 1;
this.length = 5;
/*
Privileged functions - may be accessed publicly or privately
May access Private variables.
Can NOT be changed, only replaced with public versions
*/
this.age = function(){
if(age==0) this.length+=20;
growOlder();
this.weight++;
}
}
/*
Prototyped Functions - may be accessed publicly
*/
Cat.prototype = {
talk: function(){ alert('Meow!'); },
callOver: function(){ alert(this.name+' ignores you'); },
pet: function(){ alert('Pet!'); }
}
/*
Prototyped Variables - may be accessed publicly.
May not be overridden, only replaced with a public version
*/
Cat.prototype.species = 'Cat';
/*
Static variables and functions - may be accessed publicly
*/
Cat.cats = 0;
- 与您的操作系统或体系结构不兼容:fsevents@1.0.11.
- 在Flux体系结构中,如何管理存储相同类型数据的存储
- 具有http服务器、websocket和express的体系结构
- 改进插件体系结构的实现
- Chrome 扩展消息传递体系结构
- Web应用程序的体系结构/设计,对另一台服务器进行了大量Ajax调用
- RESTful Web 应用程序中的客户端服务器体系结构
- 基于 AJAX 的聊天的数据库体系结构
- Socket.io 向某些套接字(体系结构)发出消息
- 用于第三方 API 调用的 Web 应用体系结构
- MEAN 堆栈上登录系统的体系结构
- 网络表单和脚本服务体系结构
- 网站中的单页体系结构或应用程序在 html 导航中使用 servlet 而不打开新页面
- 需要经过身份验证的 WCF REST 体系结构建议
- 需要哪种体系结构才能允许多个 Web 应用协同工作,这些应用可以单独更新
- Angularjs中ajax的单一方法体系结构
- JavaScript体系结构-中介,何时使用它们
- 用于在纯客户端测试应用程序(javascript/jquery)中维护状态和管理i/o的体系结构
- 关于可扩展JavaScript应用程序体系结构和链接的帮助
- 自己的JavaScript库的体系结构