浏览 2885 次
锁定老帖子 主题:如何跨越原形链调方法
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2007-10-16
a=[1,2,3];alert(a);看到的是1,2,3,其实这个不是a对象的toString方法,是在Arry.prototype.toString上面的,这个我们也知道,但是现在我就是想实现不走它,而调用Object.prototype.toString,可能有朋友说是不是delete(Array.prototype.toString)不是就可以了,当然可以了,但是你删除了其他数组的toString方法,&^%$*&^,当然不可以,所以,我想到了个办法,其实无非就是改变context了,toString吗,关键就是谁toString,所以 a=[1,2,3];alert(Object.prototype.toString.call(a));很不错吧,但是写这文的时候,我又想到了个办法,就是 a=[1,2,3];a.toString=Object.prototype.toString;alert(a)晚强绑定,看着很不错,其实跨越原形链最好的解决办法还是象最后不走原形链,后者象我第一个解决办法就是自己手动找函数手动指定context,完美,原形链无处不在,不管字符串的各种方法,还是数组的push pop slice splice,都是原形链,如果说学习js不懂原形链,太遗憾了 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2007-12-20
一个字:“妙”,哈哈
|
|
返回顶楼 | |
发表时间:2007-12-20
这种形式在ext的源码中经常的使用,比如ext在往arguments追加参数的时候用的就是Array.prototype.concat.call(arguments,arr),因为arguments不是数组
|
|
返回顶楼 | |
发表时间:2007-12-24
把函数作为第一公民放在前头调用了
|
|
返回顶楼 | |