-
标题党too。
今天打球输了,郁闷。第一次打系列赛以全负战绩结束,丫的。
以后得加强体能训练,下半场眼睁睁地看对方抢篮板。
呃,好像叫上宿舍几个来的更实在些,丫,切了这群小样的。
好了,罚自己洗澡打牌去。

-
咳,最大的好处就是不用修改原来的js代码,可以对方法新增一些功能,比如,这个例子中,判断
文件文件是否已经被打开了,即锁定了。enjoy it.
//test.html
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/>
<script language="JavaScript" src="aopFramework.js"></script>
<script language="JavaScript">
function Documents(){};
Documents.prototype={
_id:0,
_name:'',
name:function(){
return this._name;
},
id:function(){
return this._id;
},
save:function(){
return true;
},
open:function(id){
this._id = id;
this._name = 'test Open';
return true;
}
}
function openDocument(id){
var doc = new Document();
try{
document.open(id);
}
catch(e){
alert(e);
return;
}
alert("Doc id: " + doc.id());
return doc;
}
function Lockable(){}
Lockable.prototype = {
_locked: false,
locked: function() {
return this._locked;
}
}
function lockOnOpen()
{
// Lock this object
// If we didn't succeed
// throw (new Error ("Failed locking " + this._name));
if(this._locked == true){
throw (new Error ("Failed locking " + this._name));
}
// The object is locked
this._locked = true;
alert("locked");
}
function allTest(){
try {
//增加对象的属性,prototype
Aspects.addIntroduction(Lockable, Documents);
//增加对象方法的预处理
Aspects.addBefore(lockOnOpen, Documents, "open");
}
catch(e)
{
alert(e);
}
var doc = new Documents();
try {
doc.open(222);
}
catch(e)
{
alert(e);
}
// Update icons and other user elements affected
alert("Doc id: " + doc.id());
try {
doc.open(222);
}
catch(e)
{
alert(e);
}
// Update icons and other user elements affected
alert("Doc id: " + doc.id());
}
</script>
</head>
<body onload="allTest();">
</body>
</html>
//aopFramework.js
InvalidAspect = new Error("Missing a valid aspect. Aspect is not a function.");
InvalidObject = new Error("Missing valid object or an array of valid objects.");
InvalidMethod = new Error("Missing valid method to apply aspect on.");
Aspects = new Object();
Aspects._addIntroduction = function(intro, obj)
{ for (var m in intro.prototype)
{
obj.prototype[m] = intro.prototype[m];
}
}
Aspects.addIntroduction = function(aspect, objs)
{
var oType = typeof(objs);
if (typeof(aspect) != 'function')
throw(InvalidAspect);
if (oType == 'function')
{
this._addIntroduction(aspect, objs);
}
else if (oType == 'object')
{
for (var n = 0; n < objs.length; n++)
{
this._addIntroduction(aspect, objs[n]);
}
}
else
{
throw InvalidObject;
}
}
Aspects.addBefore = function(aspect, obj, funcs)
{
var fType = typeof(funcs);
if (typeof(aspect) != 'function')
throw(InvalidAspect);
if (fType != 'object')
funcs = Array(funcs);
for (var n = 0; n < funcs.length; n++)
{
var fName = funcs[n];
var old = obj.prototype[fName];
if (!old)
throw InvalidMethod;
obj.prototype[fName] = function() {
aspect.apply(this, arguments);
return old.apply(this, arguments);
}
}
}
Aspects.addAfter = function(aspect, obj, funcs)
{
if (typeof(aspect) != 'function')
throw InvalidAspect;
if (typeof(funcs) != 'object')
funcs = Array(funcs);
for (var n = 0; n < funcs.length; n++)
{
var fName = funcs[n];
var old = obj.prototype[fName];
if (!old)
throw InvalidMethod;
obj.prototype[fName] = function() {
var args = old.apply(this, arguments);
return ret = aspect.apply(this, Array(args, null));
}
}
}
Aspects._getLogic = function(func)
{
var oSrc = new String(func);
var nSrc = '';
var n = 0;
while (oSrc[n])
{
if (oSrc[n] == '\n' || oSrc[n] == '\r')
nSrc[n++] += ' ';
else
nSrc += oSrc[n++];
}
n = 0;
while (nSrc[n++] != '{');
nSrc = nSrc.substring(n, nSrc.length - 1);
return nSrc;
}
Aspects.addAround = function(aspect, obj, funcs)
{
if (typeof(aspect) != 'function')
throw InvalidAspect;
if (typeof(funcs) != 'object')
funcs = Array(funcs);
var aSrc = this._getLogic(aspect);
for (var n = 0; n < funcs.length; n++)
{
var fName = funcs[n];
if (!obj.prototype[fName])
throw InvalidMethod;
var oSrc = 'var original = ' + obj.prototype[fName];
var fSrc = oSrc + aSrc.replace('proceed();',
'original.apply(this, arguments);');
obj.prototype[fName] = Function(fSrc);
}
return true;
} -
呼,需求的重要性阿,nnd。受不了了。事情怎么都是赶到一起了呢。
好吧,深呼吸,“阿,世界多么美好啊~~~~~~”。
btw,我人品问题,用不了沙茶。
-
发现身边的人都在休养生息,呃,我也算休养生息吧。
今天打篮球了,暴打3个小时,把对方的1,2,3,4,5号位统统虐了一遍-_-,最后结果是 体力不支-_-
下周干什么呢?呃,看看书吧,最近发现不少好书,哈。算了不说了,等啥时把笔记贴出来再说,免得被人海扁。
-
http://www.dotvoid.com/view.php?id=43
mark一下,回头再写上,哈。
-
为年前的后续烦恼,顺利的话,下周有时间了,我会把servlet的笔记补上,呃,还有这几天的培训内容,
uml应用。说实话,多吃几年米还是有用的,归纳也是必须的,听课还是很有用了,我有多久没有像这几天这样听课了?6年还是7年?忘记了-_-
-
在家呆着就是舒服啊,T_T,就不能不上班。
好好加油,然后再回家好好过年,哈哈。
恩,今年一定要好好执行计划了,又一次这么说了。(我为什么说又-_-)。吃饭去。
-
在放了两天羊之后,终于要回家了。感谢boss没有让我过年值班,hiahia。
哥们就先闪人了。xd们新年快乐。有好事要惦记着咱呐。有啥事需要帮手的也惦记咱一下,咔咔。来,跟我默念,深呼吸,“世界多么美好啊……”。
小村,我胡汉三又回来了。
ps:占个位置,回来写个serlvet的笔记,恩,js的aop,hiahia。
-
事情终于稳定了,呵,至少年前不用劳神费力了,so,可以安心过年了。2006年是发展的一年,令人振奋的一年,(以下省略1000字),回顾2006,展望2007,……。
总的来说,2006比上不足比下有余,做人要学会知足不是。最重要的是家人、朋友都健康,呵呵,谢谢帮过我的家人和朋友,and 菩萨各路神仙^_^。
2007要好好加油了,实现目标,加油加油。
-
今年的年成不怎么样。不管是好是坏,都可以收心过年了。明年去哪还真的很难决定,呼。
想象自己也算是弱势群体?事情都是别人说了算?被人放鸽子那是很平常的事。
今天看了一部电影,呃,好吧,没有版权的那种。就记住了其中的一句话,为自己而工作,你会做得更好。也许我明天就可以开始转变我的观念吧。呃,明天还要上班,o,shit。
马上就本命年了,还是老老实实滴比较合适。