我正在学习使用 Titanium 制作 iPhone/Android 应用程序。我正在使用合金 MVC 框架。我以前从未使用过 javascript,除了 HTML 中的简单脚本来访问 DOM 或类似的东西,所以我以前从来不需要构造代码。
现在,使用 Titanium,我必须使用大量 JS 代码,并且我一直在寻找构建代码的方法。基本上我找到了 3 种方法来做到这一点:原型、命名空间和函数内部的函数。
每个的简单示例:
原型:
NavigationController = function() {
this.windowStack = [];
};
NavigationController.prototype.open = function(windowToOpen) {
//add the window to the stack of windows managed by the controller
this.windowStack.push(windowToOpen);
//grab a copy of the current nav controller for use in the callback
var that = this;
windowToOpen.addEventListener('close', function() {
if (that.windowStack.length > 1)
{
that.windowStack.pop();
}
});
if(Ti.Platform.osname === 'android') {
windowToOpen.open();
} else {
this.navGroup.open(windowToOpen);
}
};
NavigationController.prototype.back = function(w) {
//store a copy of all the current windows on the stack
if(Ti.Platform.osname === 'android') {
w.close();
} else {
this.navGroup.close(w);
}
};
module.exports = NavigationController;
将其用作:
var NavigationController = require('navigator');
var navController = new NavigationController();
命名空间(或者我认为是这样的,因为使用 me = {}):
exports.createNavigatorGroup = function() {
var me = {};
if (OS_IOS) {
var navGroup = Titanium.UI.iPhone.createNavigationGroup();
var winNav = Titanium.UI.createWindow();
winNav.add(navGroup);
me.open = function(win) {
if (!navGroup.window) {
// First time call, add the window to the navigator and open the navigator window
navGroup.window = win;
winNav.open();
} else {
// All other calls, open the window through the navigator
navGroup.open(win);
}
};
me.setRightButton = function(win, button) {
win.setRightNavButton(button);
};
me.close = function(win) {
if (navGroup.window) {
// Close the window on this nav
navGroup.close(win);
}
};
};
return me;
};
将其用作:
var ui = require('navigation');
var nav = ui.createNavigatorGroup();
函数内部的函数:
function foobar(){
this.foo = function(){
console.log('Hello foo');
}
this.bar = function(){
console.log('Hello bar');
}
}
// expose foobar to other modules
exports.foobar = foobar;
将其用作:
var foobar = require('foobar').foobar
var test = new foobar();
test.bar(); // 'Hello bar'
现在我的问题是:哪个更好地保持代码干净和清晰?原型似乎很容易阅读/维护。命名空间让我有点困惑,但只需要执行初始函数即可“可用”(在声明它时不使用 new,我想是因为它返回对象?命名空间?“我”)。最后,functions inside functions与上一个类似,所以我不知道确切的区别,但是只导出main函数并让所有内部函数可供以后使用是有用的。
也许最后两种可能性是相同的,我在搞乱概念。
请记住,我正在寻找一种构建代码的好方法,并让其他模块和自己的模块内部都可以使用函数。
我感谢任何澄清。