Friday, November 07, 2008
John Resig
His blog address: http://ejohn.org/, we can learn more about
javascript from his articles.
"Object()" or "new Object()" in javascript
"new Object()", here's an example:
function User(name, age){
//if ( !(this instanceof User) )这个也是可以工作的, 但是arguments.callee更通用
if ( !(this instanceof arguments.callee) )
return new User(name, age);
this.name = name + " - " + age;
}
var user = User("xlty", 27); <==> var user = new User("xlty", 27);
flexible arguments
Math.min accept a list of number:
> Math.min(1,43);
We want to pass an array to Math.min
> Math.min.apply( Math, array );
Friday, October 31, 2008
实现了一个简单的js test工具集
==========================================================================
//测试项
var TestEntry = function(id){
return {
//目前只实现了一个简单的方法, 其他的可以自由扩展
assertTrue: function(result){
var r = ET.get(id);
r.append(result? "Ok" : "Error");
r.addClass(result? "ok" : "error");
}
}
}
//测试执行器
var Test=function(){
var mc;
return {
init:function(dom){
ET.get(dom || document.body).append("<div
id='messageconsole'><b>Message console:</b></div>");
mc = ET.get("messageconsole");
},
addTest: function(msg){
var id = UUID.generate("v4");
mc.append("<br><b class='item'>test "+msg+" <b class='result'
id='"+id+"'></b></b>");
return TestEntry(id);
},
reset: function(){
mc.html("<br>");
},
report: function(){
//设置延时是为了, 等待异步执行的部分ajax测试完成
setTimeout(function(){
var total = ET.getByJQSelector("b.item").length;
var error = ET.getByJQSelector("b.error").length;
var ok = ET.getByJQSelector("b.ok").length;
mc.append("<br><br>"+
"<b class='item'>Totally "+total+" tests,</b>"+
"<b class='passed'> passed "+ok+" tests,</b>"+
"<b class='failed'> failed "+error+" tests,</b>"+
"<b class='unfinished'> unfinished "+(total-ok-error)+" tests</b>");
},
1000);
}
}
}();
==========================================================================
css代码:
.item {
color: blue;
}
.result, .unfinished, .failed {
color: red;
}
.passed {
color: #55FF55;
}
==========================================================================
用法:
Test.init();
//普通测试项
Test.addTest("log message here").assertTrue(1+2==3);
//异步操作的测试
var ajaxTest = Test.addTest("ajax request test");
Ajax.request({data:{id:1}, url:'../getName.htm', callback:function(data){
ajaxTest.assertTrue(data.name='apple');
}
});
Test.report();
解释说明:
Test.addTest在系统中添加一条测试记录,
返回一个TestEntry, 用返回的TestEntry的assert系列方法, 来断定此测试项的正确与否
Thursday, October 30, 2008
JQuery 树插件介绍: jQuery SimpleTree Drag&Drop plugin
Wednesday, October 08, 2008
利用event bus来降低前台业务代码耦合度, Event bus - javascript, js实现
目标: 为了尽可能的减少模块之间业务逻辑的耦合度, 而开发了这个消息总线, 主要用于业务逻辑的事件传递
Saturday, October 04, 2008
js简单继承的实现, 改进篇
前文表述: js简单继承的实现
前文问题:alert(child instanceof base); 打印false, 此处并没有实现真正的继承
改进:
function base() {
this.member = "dnnsun_Member";
this.test=function(){
window.alert('in base');
}
}
base.prototype.test= function() {
window.alert("base member "+this.member);
}
function extend(child, b) {
b.call(child);
child.prototype=new b;
}
var childclass=function(){
this.test=function(){
window.alert("in child");
}
};
extend(childclass, base);
child = new childclass;
window.alert(child.member);
window.alert(child.test);
child.test();
window.alert(child instanceof base);
不能没有doctype
* 在不同的浏览器下网页莫名其妙的布局问题
* document.body与document.documentElement谁的属性是准的?
* scrollLeft
* Right
* Top
* Bottom