OO的JS
下午,把GTALK的签名档改成了这个。小HL没看懂,host说“赞”。
啥意思呢?就是Object Oriented的Javascript。
前几天复习电子商务这门课的考试时,还在ppt上看到说javascript是一种基于对象(Object Based)的语言,而不是面向对象(Ojbect Oriented)的,当时觉得有点含糊,网上有人这样说: “Peter Wegner在一篇顶级论文中,将环境划分为对象结构(objected-structured)、基于对象(object—based)、基于类 (object—class)和面向对象(obJect—oriented)几个范畴。第一个范畴只具有封装和状态保持特性;第二个范畴增加了对象标识特 性:第三个范畴增加了类的概念;最后一个范畴增加了继承和本章提到的其它特性......”
心生怀疑,貌似js里也可以实现类、继承的概念,而且由于是弱类型的,在多态方面也很难界定。
在js里创建一个类的方法
function ClassName() //同时也是构造函数
{
this.field = somevalue; //成员
}
ClassName.staticFiled = somevalue; //静态成员
ClassName.prototype.foo = function() //方法
{
...
}
ClassName.bar = function() //静态方法
{
...
}
创建实例
var instanceName = new ClassName();
继承
function subClass()
{
...
}
subClass.prototype = new ClassName();
JS中的this对象
在prototype.foo这样的成员函数中,this指的是实例,没有this的,默认为全局的,或window的。
调用函数
调用某个对象的成员函数,直接通过obj.foo这样的形式就可以,但在有些情况下是很麻烦的。比如事件的注册,或者是传递函数指针,就需要在传递时,将对象一起传过去。一般来说,会把函数名作为字符串传递,然后用obj["methodName"]的形式调用函数。
从昨天起,我就开始使用OO的js重构我之前写过的一个web qq。但是进展比我想象的缓慢的多。主要就是因为在js中使用OO思想很不熟练(方法也比较奇怪)。今天就遇到了一个很头疼的问题,现在还没有很好地解决。就是在使用window.setTimeout时,需要传递一个对象的成员函数进去,如上所述,一般需要把对象也传过去,但是window的prototype我是不想修改的(也不知道能不能修改),所以就给函数中加了参数,用来传递对象,但是只要这么一做,setTimeout就会很抽风的运行——不管设置的时间是多长,都会不断的重复执行。现在我的解决办法是一段很丑陋的代码,就是加入了一个global的函数来不断调用setTimeout间歇重复执行自己,在函数体里执行obj.foo。当然,我也就给很丑陋的函数起了一个更丑陋的名称:“fuckTimer”。
今天还遇到一个巨SB的问题,我又一次把赋值的=写成==了!!
4 条评论:
JAVA啊,不懂的说。。。。。
FuckTimer终于被改掉了……
IE6的window.prototype貌似不行
另外白神同学等你上班了就知道有东西可以让你对象了,咔咔
这篇我转到白云了,跟你说一下,恩
发表评论