百度首页 | 百度空间
 
查看文章
 
如何跨越原形链调方法
2007年10月16日 星期二 下午 04:45
如何跨越原形链调方法
我们知道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不懂原形链,太遗憾了

类别:javascript&web2.0 | 添加到搜藏 | 浏览() | 评论 (0)
 
最近读者:
 
网友评论:
发表评论:
姓 名:
网址或邮箱: (选填)
内 容:
验证码:
 

     

©2008 Baidu