精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2008-07-05
还有这个论坛不登陆回帖,登陆回来就没了,太郁闷了,管理员修改修改代码
|
|
返回顶楼 | |
发表时间:2008-07-05
afcn0 写道 回去好好......再来......
这是JavaEye特色么 haha 这几天经常看到 |
|
返回顶楼 | |
发表时间:2008-07-05
afcn0 写道
你们在讨论什么,arguments.callee什么含义?就是调用当前参数对象的被调用函数,废话当然就是foo1或foo2函数本身,为什么你说开始会有不同,废话,apply(this和foo1()直接能一样吗,this的context就会随着执行变化而变化,而foo1(可能吗?
foo1就===arguments.callee 最后,你们说的什么ms不支持什么ff.i_temp什么东西,哪个是ie只支持FunctionDeclaration不支持FunctionExpression,结果更是废话,回去好好看看权威指南再来发帖子
同学,你还记得你的博客上有一篇 JavaScript原形链多继承函数我这里讨论的和你的这篇文章有相似之处,只不过我没有用多继承这个词汇. arguments.callee是如此的至关重要. 善用了arguments.callee不但兼容了多继承,而且还可以兼容向c++里的虚函数的方法. 你再仔细对比一下你的方法,和我这里说的方法的区别. 对你的 afcn0 写道
.....废话.....
无所谓,因为我要表达的东西,往往很难让人明白我在说什么. 对你的 afcn0 写道
.....回去好好看看权威指南再来发帖子.......
我不是在这里讨论javascript的特性的,是为了解决问题的.是在找方法,做实验的. 你再仔细看看这一段 var a=0;//为了跳出递归设置的变量 foo1('foo1:'); var a=0; foo2('foo2:'); var f={}; f.ff=foo1;//这就是javascript最简单形式的Mixin了 var a=0; f.ff('foo1Mixin:'); f.ff=foo2; var a=0; f.ff('foo2Mixin:'); foo1就===arguments.callee,但是写法不同对于继承的影响可就不一样了. |
|
返回顶楼 | |
发表时间:2008-07-05
我的blog上面那个只是说明利用中间对象修改__proto__属性,实现原型链多继承一种方式,因为多继承实体继承简单,圆形继承困难
而我回你的帖子只是说明你所讨论的所有问题就是arguments.callee===本函数,并且解释了call和.可以改变函数执行的context 最后关于ie问题,我只是作出了ie不支持函数直接表达式的解释,所有都是函数声明,在我以前也讨论过 |
|
返回顶楼 | |
发表时间:2008-07-05
afcn0 写道 我的blog上面那个只是说明利用中间对象修改__proto__属性,实现原型链多继承一种方式,因为多继承实体继承简单,圆形继承困难
而我回你的帖子只是说明你所讨论的所有问题就是arguments.callee===本函数,并且解释了call和.可以改变函数执行的context 最后关于ie问题,我只是作出了ie不支持函数直接表达式的解释,所有都是函数声明,在我以前也讨论过 我这个帖子真不是讨论什么arguments.callee,讨论的是arguments.callee在继承中发挥的作用. 也就是怎么样写代码才能真正的实现无错误继承(还有虚函数). 换句话就是: 如果我们写一个函数目的就是为了让别的对象继承的.那这个函数怎么写才能万无一失(这个词有些夸张,要靠实践才能认定). |
|
返回顶楼 | |
发表时间:2008-07-05
2个相关帖子http://www.iteye.com/post/408365 http://www.iteye.com/post/438660
用arguments.callee.call执行完全递归好似是理所应当的 |
|
返回顶楼 | |
发表时间:2008-07-06
afcn0 写道 this的context就会随着执行变化而变化
话说 一知半解比无知更可怕啊...... this的context是什么东西呢 |
|
返回顶楼 | |
发表时间:2008-07-06
楼上这种物质言论我就不评价了,apply call修改的context如果不是this那就没必要讨论了,我的语文还是很清楚地
|
|
返回顶楼 | |
发表时间:2008-07-06
知道马尔可夫链不?马尔可夫链算法可以用于随机生成一些可以阅读的文本(请参看《程序设计实践》)。
你说的话实在太像根据关于JS的各种文档用马尔可夫链算法生成的文本了,词还是那些词,不过组合出来完全不知道是什么意思。 像什么"this的context"、"call和.可以改变函数执行的context"、"apply call修改的context" 特别是"对于function默认执行aaa自己变量返回的特有对于eval产生scope当作context特殊对象有关",说实话,我真的看到这句话第一眼就想到马尔可夫链了. 不但把所有概念全都用错了 而且中文根本不成句 更不用提话本身的正确性了 |
|
返回顶楼 | |
发表时间:2008-07-06
afcn0 写道 你们在讨论什么,arguments.callee什么含义?就是调用当前参数对象的被调用函数,废话当然就是foo1或foo2函数本身,为什么你说开始会有不同,废话,apply(this和foo1()直接能一样吗,this的context就会随着执行变化而变化,而foo1(可能吗?
foo1就===arguments.callee 最后,你们说的什么ms不支持什么ff.i_temp什么东西,哪个是ie只支持FunctionDeclaration不支持FunctionExpression,结果更是废话,回去好好看看权威指南再来发帖子 火气不用那么大吧? 我觉得楼主的用意是好的,不过其实可以说的更明白一点。 那就是: arguments.callee 是一个鲁棒的引用自身的方式,而直接用函数名则不够鲁棒。如果是内部函数自然无所谓,但是如果你的函数是面向外部用户的,则就要小心,因为外部用户的使用改函数的方式可能超出你的本意。 例如不是作为函数,而是作为一个对象上的方法。或者可能被用作所谓mixin。另外有可能在调用过程中(恶意或不经意的)修改名称。这参见:改写函数实际上违背了FP的无副作用的精神。 |
|
返回顶楼 | |