论坛首页 Web前端技术论坛

如何跨越原形链调方法

浏览 2885 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-10-16  
我们知道js对象很多属性方法都不是自己的,也就说都不是早绑定上去的,比如"aa"有很多方法,当然它是基本类型,不是对象,但是js由于有String Boolean Number这三个影子wrapper所以基本类型也可变对象,与本文无关,本文讲的是怎么跨原形链调用函数,比如
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不懂原形链,太遗憾了
   发表时间:2007-12-20  
一个字:“妙”,哈哈
0 请登录后投票
   发表时间:2007-12-20  
这种形式在ext的源码中经常的使用,比如ext在往arguments追加参数的时候用的就是Array.prototype.concat.call(arguments,arr),因为arguments不是数组
0 请登录后投票
   发表时间:2007-12-24  
把函数作为第一公民放在前头调用了
0 请登录后投票
论坛首页 Web前端技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics