这是我的实施,想知道是否有任何改进,或分享你的想法。
//* global variable *//
//I put all the variable into $('body');
$base_url = $('body').data('base_url');
$logged_in = $('body').data('logged_in');
//...
//* Object. like namespace *//
lzyy = {};
//* constructor *//
//correspond with mvc's c(controller)
lzyy.tag = function()
{
//new Class
m_ftl = new fav_tag_list('#fav_tag_list');
m_fti = new fav_tag_input('#fav_tag_input');
m_note = new note('#note');
};
//* method *//
//correspond with mvc's m(method)
lzyy.tag.property.add = function()
{
//* events bind *//
$('#fav_tag_btn').bind('click',function(e){
m_ftl.add_tag(m_fti.get_val());
m_fti.clear();
});
}
//* util functions *//
lzyy.preload_imgs = function()
{
for(var i = 0; i<arguments.length; i++)
{
jQuery("<img>").attr("src", arguments[i]);
}
};
lzyy.br2nl = function(str)
{
return str.replace(/<br\s*\/?>/mg,"\n");
};
//...
//* init *//
$(function()
{
//do something that can affect all pages
});
//* objects *//
//need another code snippet provided below
var Base_Class = Class.extend({
init:function(selecotr)
{
if(!this.self)
this.self = $(selecotr);
}
});
//for example,we have an dom element id = note
//we can add method , property
var note = Base_Class.extend({
close:function()
{
this.self.slideUp('fast');
}
});
//we can override parent method
var tag_input = Base_Class.extend({
init:function(selecotr)
{
this._super(selecotr);
if(this.self.length)
{
//do something...
}
},
append_item:function(data)
{
this.self.append(data);
}
});
//...
答案 0 :(得分:3)
即使这可能不符合您的问题/改进建议请求的“答案”,但我必须质疑您的目标:
为什么在编写java 脚本时使用OOP?该语言不是为它设计的(顺便说一下,jQuery框架也没有),我认为根本没有任何收获性能和可维护性。我唯一看到的是,需要更多的代码来获得相同的结果,并且为了所有实际目的而执行不相关的编程范例。
答案 1 :(得分:1)
我倾向于将我的网站分成多个对象,而这些对象中的大多数都是单例(也就是说,它们没有构造函数)。这是因为,您每个站点真正需要多个对象的频率是多少?有时,但不经常。
我通常拥有的对象是GUI,它负责处理gui,Backend,它具有向服务器发出请求的标准化功能,处理响应JSON的方法,以及处理错误(包括服务器的错误)传递下来,通常显示在模态弹出窗口中),以及一个控制对象,它处理页面的工作方式。每个对象都在自己的文件中定义。
以下是具有构造函数(不是单例)的对象的示例:
function ClassName(arg1, arg2){
var that = this;
/****Private Variables****/
var a = 0;
var b = 1;
/****Public Variables****/
this.c = 2;
this.d = 3;
/****Private Functions****/
var e = function(arg1, arg2){
}
var f = function(arg1, arg2){
}
/****Protected Functions****/
this.g = function(arg1, arg2){
}
this.h = function(arg1, arg2){
}
/****Constructor code ****/
alert("constructed");
}
/*****Public Functions*****/
ClassName.prototype.i = function(arg1, arg2){
}
ClassName.prototype.j = function(arg1, arg2){
}
以下是单身人士的一个例子:
var ObjectName = {};
/****Public Variables****/
ObjectName.a = 0;
ObjectName.b = 1;
/****Public Functions****/
ObjectName.c = function(arg1, arg2){
}
ObectName.d = function(arg1, arg2){
}