说到Javascript的类继承,就必然离不开原型链,但只通过原型链实现的继承有着不少缺陷。
无参数类继承的问题
先看一段示例代码,实现B继承于A:
function A() {
}
A.prototype.a1 = function() {
};
function B() {
}
B.prototype = new A();
B.prototype.b1 = function() {
};
var b = new B();
alert(b.constructor == A); // true
alert(b.constructor == B); // false
这段代码的主要问题是:
- 需要实例化A作为B的原型,此时就执行了A的构造函数。但按照面向对象的规则,实例化B之前,B及其父类A的构造函数都不应该执行。
由于网易微博的数据还没有完全对外开放,像“我的首页”、“我的微博”的JSON数据都不能直接通过Javascript调用,而是必须先登录才能获取。因此,要想把微博数据调用到博客上,就得在后台做一个页面代理。
页面代理的唯一工作就是带上已登录的Cookie发送一个Http请求,获取并输出回应内容。这个过程主要涉及到两个类,HttpWebRequest和HttpWebResponse,它们都在System.Net名字空间内。
通过Firebug的网络面板可以看到,网易微博中“我的微博”数据地址如下:
http://t.163.com/statuses/user_timeline/用户名.json
先建立一个HttpWebRequest类的实例,并设置相应属性的值:
HttpWebRequest request = (HttpWebRequest)HttpW
昨天在博客园看到了两篇文章。这两篇文章虽然标题不同,但讨论的主题都与软件维护有关,阅后颇有感触。
技术债务
原文地址:http://www.cnblogs.com/houbowei/archive/2010/05/20/1739751.html
作者把程序员开发时留下隐患称为技术债务。技术债务又分为代码债务和文档债务。
代码债务是指为了快速地解决问题,而采取的不规范的方案。比方说把某个条件写死,或者是把特殊情况写在了通用代码中。如果不尽快偿还,一旦基于该代码进行二次开发,影响范围将越来越大。
文档债务是指修改了代码后,没有修改相关的文档,造成文档和实际代码功能上的不一致。一段时间后,大家就会发现文档
昨晚着手给个人博客增加网易微博的调用,在Opera下却出现了一个意想不到的问题。内容的展示,一开始是做成横向不间断滚动(现在已经改成纵向定时滚动了)。
不间断滚动的原理这里不详细说了,其中一个必要的条件是,进行滚动的内容容器要设置得很宽,这样才能使内容排在一行。一般情况下,几千像素也够了,但是微博的信息可能很长,况且一读就有好几十条,这宽度非得设成几万像素不可。
虽然数字比较大,但是在Firefox、IE中测试过后也是没问题的,唯独是Opera下出现了悲剧:

从Opera的开发工具Dragonfly中可以发现,虽然我设置了宽度为80000px,但是计算结果只有32767px。当时我还没发觉32767这个数字的特殊之处
SQL注入漏洞曾经是Web应用程序的噩梦,CMS、BBS、Blog无一不曾受其害。
SQL注入的原理
以往在Web应用程序访问数据库时一般是采取拼接字符串的形式,比如登录的时候就是根据用户名和密码去查询:
string sql = "SELECT TOP 1 * FROM [User] WHERE UserName = '" + userName + "' AND Password = '" + password + "'";
其中userName和password两个变量的值是由用户输入的。在userName和password都合法的情况下,这自然没有问题,但是用户输入是不可信的,一些恶意用户只要用一些技巧,就可以绕过用户名、密码登录。
假设password的值是"1' or '1' = '1",userName的值随便取,比如是"abc",那变量sql的值就是:
"SELECT TOP 1 * FROM [Use
这个月对jRaiser进行了两次改动,版本分别是1.3.2和1.3.3。
1.3.2版主要是修改了选择器引擎,在适当的时候调用浏览器提供的querySelectorAll接口,提高搜索元素的效率。但由于只有IE8、Firefox 3等最新版本的浏览器支持此接口,所以这次优化对IE6、IE7是无效的。
1.3.3版本在1.3.2版本的基础上修正了id选择器的一个BUG(感谢网友atans提交),并对Array.prototype.indexOf进行了修正使其与ECMAScript中定义的一致。
29日再度更新1.3.3版,解决IE下的id选择器BUG。
下载地址:http://code.google.com/p/jraiser/downloads/list。