浏览 3672 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2007-05-25
var myClass = Class.create(); Object.extend(myClass.prototype, { initialize : function () {}, toString : function () { return "myClass"; } }); var mc = new myClass(); alert(mc); myClass并没有获得我定义的toString的方法,myClass实际继承的可能 还是Object的toString方法,可以通过alert(mc.toString);来测试, 如果返回的是native 就是系统默认的toString。 有人知道如何解决吗??? 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2007-05-25
的确有这个问题,刚才测试了一下,在firefox中是正确覆盖了的,但是ie就没有,奇怪……
|
|
返回顶楼 | |
发表时间:2007-05-25
可能你的类定义方式有问题,改为如下代码就正常了:
js 代码
而且这样的定义要清晰得多:) |
|
返回顶楼 | |
发表时间:2007-05-25
if((super.hasOwnProperty && super.hasOwnProperty('toString')) || (!super.hasOwnProperty && super.toString)) {
proto.toString = super.toString; } 自己琢磨去吧! |
|
返回顶楼 | |
发表时间:2007-05-25
笨笨狗 写道: 可能你的类定义方式有问题,改为如下代码就正常了:
js 代码
而且这样的定义要清晰得多:) 谢谢笨笨狗的提醒,Prototype的Object.extend,是用for key in object来实现的,我想可能是for key的时候,无法取得Object的系统实现方法。 |
|
返回顶楼 | |
发表时间:2007-05-26
笨笨狗 写道 的确有这个问题,刚才测试了一下,在firefox中是正确覆盖了的,但是ie就没有,奇怪……
这是因为jscript和moz的js引擎在处理 for/in 的时候不一样。开发qomo框架的周爱民也发现过这个问题,和我讨论过。 简单来说,规范规定对于toString,valueOf等“不可枚举”属性,在for/in时不能列出来。jscript的做法是,看名字,也就是说所有属性名属于一个“不可枚举”列表的名单中,那就不会被for/in出来,即使该属性的值实际上已经被改写。moz等引擎却不是这样。 从规范来说,并没有明确规定哪种方式才是正确的,但我与qomo的周爱民等,都认为显然jscript的“名不副实”的做法是很“白痴”的做法。 |
|
返回顶楼 | |