Heero's Blog

Heero's Blog » 首页
Jun 12

再论Javascript的类继承

  • 作者:heero
  • 时间:2010-6-12 22:12

说到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的构造函数都不应该执行
May 25

使用页面代理调用网易微博数据

  • 作者:heero
  • 时间:2010-5-25 11:05

由于网易微博的数据还没有完全对外开放,像“我的首页”、“我的微博”的JSON数据都不能直接通过Javascript调用,而是必须先登录才能获取。因此,要想把微博数据调用到博客上,就得在后台做一个页面代理

页面代理的唯一工作就是带上已登录的Cookie发送一个Http请求,获取并输出回应内容。这个过程主要涉及到两个类,HttpWebRequestHttpWebResponse,它们都在System.Net名字空间内。

通过Firebug的网络面板可以看到,网易微博中“我的微博”数据地址如下:

http://t.163.com/statuses/user_timeline/用户名.json

先建立一个HttpWebRequest类的实例,并设置相应属性的值:

HttpWebRequest request = (HttpWebRequest)HttpW

May 21

关于软件的维护

  • 作者:heero
  • 时间:2010-5-21 09:55

昨天在博客园看到了两篇文章。这两篇文章虽然标题不同,但讨论的主题都与软件维护有关,阅后颇有感触。

技术债务

原文地址:http://www.cnblogs.com/houbowei/archive/2010/05/20/1739751.html

作者把程序员开发时留下隐患称为技术债务。技术债务又分为代码债务文档债务

代码债务是指为了快速地解决问题,而采取的不规范的方案。比方说把某个条件写死,或者是把特殊情况写在了通用代码中。如果不尽快偿还,一旦基于该代码进行二次开发,影响范围将越来越大。

文档债务是指修改了代码后,没有修改相关的文档,造成文档和实际代码功能上的不一致。一段时间后,大家就会发现文档

May 7

Opera下的max-width BUG

  • 作者:heero
  • 时间:2010-5-7 14:16

昨晚着手给个人博客增加网易微博的调用,在Opera下却出现了一个意想不到的问题。内容的展示,一开始是做成横向不间断滚动(现在已经改成纵向定时滚动了)。

不间断滚动的原理这里不详细说了,其中一个必要的条件是,进行滚动的内容容器要设置得很宽,这样才能使内容排在一行。一般情况下,几千像素也够了,但是微博的信息可能很长,况且一读就有好几十条,这宽度非得设成几万像素不可。

虽然数字比较大,但是在Firefox、IE中测试过后也是没问题的,唯独是Opera下出现了悲剧:

Dragonfly

从Opera的开发工具Dragonfly中可以发现,虽然我设置了宽度为80000px,但是计算结果只有32767px。当时我还没发觉32767这个数字的特殊之处

May 3

使用参数化查询防止SQL注入漏洞

  • 作者:heero
  • 时间:2010-5-3 12:56

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

Apr 26

jRaiser 1.3.3 发布

  • 作者:heero
  • 时间:2010-4-26 10:33

这个月对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

  1. « 上一页
  2. 1
  3. 2
  4. 3
  5. 4
  6. 5
  7. 6
  8. 7
  9. 8
  10. 9
  11. 10
  12. 11
  13. 12
  14. 13
  15. 下一页 »