该帖已经被评为精华帖
|
|
---|---|
作者 | 正文 |
发表时间:2008-06-25
我滴神啊 你以为函数返回值相同就叫等价?
你说的实在太远了我才把ECMA262搬出来解释解释免得误导新人 你要非说没错我也没办法 反正我这人别人说点什么总插一杠子说不对确实挺烦人(我自己也这么觉得 哈哈) 不过有我搅和一下 可能有些人再看这东西的时候会稍微自己思考一下吧 毕竟这帖子挂着个精华的招牌呢 我挺怕看一片叫好的帖子的 有些东西我要不说 说不定真就没人说了 那么 目的已经达到了 我也不会再参与这个讨论了 最后感慨一句 JS这个貌似可爱的脚本咬起人来其实挺疼的 |
|
返回顶楼 | |
发表时间:2008-06-25
本质这个东西,语言的创造者最有话语权。
lz的探索精神值得称赞,但结论还是参考标准吧。 |
|
返回顶楼 | |
发表时间:2008-07-04
csf177 写道 - -!这样也可以靠上 你明明连词法关系都没搞对...... 人家new跟函数调用是两种表达式 只不过是长得很像 都带括号而已
算了不说了 能看懂ECMA262的人太少了 明明就那么几行英文 真无奈 设计一个貌似可爱的脚本能让一大半的使用者都看不懂标准文档 该说Brendan Eich水平高还是说他悲哀? 或者,二者兼有...... ECMA262规范不是BE大人写出来的,而是委员会产物。他只不过review过。如果要说BE写出来的,那当然是JavaScript的Referenece和Guide。 当然规范写成这样诘屈聱牙,BE同志自然不能完全脱离干系。但是其中内情,怕是只有委员会的当事人知道。 |
|
返回顶楼 | |
发表时间:2008-07-04
BTW,楼主精神可嘉,希望你好好读Spec,天天向上。
|
|
返回顶楼 | |
发表时间:2008-07-04
确实楼主的研究方法有问题. 你在IE和FF下分别试试这样的写法 function f(){return 'f';} var vf=function() {return 'vf';} try{ var f1=new Function(f); if(f1) alert(f1.toString()); }catch(e){ alert('can not new Function(f)'); } try{ var f2=new Function(vf); if(f2) alert(f2.toString()); }catch(e){ alert('can not new Function(f)'); } 至于标准怎么说我没有仔细看过,反正浏览器实现是不同的. |
|
返回顶楼 | |
发表时间:2008-07-04
hax 写道 csf177 写道 - -!这样也可以靠上 你明明连词法关系都没搞对...... 人家new跟函数调用是两种表达式 只不过是长得很像 都带括号而已
算了不说了 能看懂ECMA262的人太少了 明明就那么几行英文 真无奈 设计一个貌似可爱的脚本能让一大半的使用者都看不懂标准文档 该说Brendan Eich水平高还是说他悲哀? 或者,二者兼有...... ECMA262规范不是BE大人写出来的,而是委员会产物。他只不过review过。如果要说BE写出来的,那当然是JavaScript的Referenece和Guide。 当然规范写成这样诘屈聱牙,BE同志自然不能完全脱离干系。但是其中内情,怕是只有委员会的当事人知道。 BE大人设计的比较精妙 所以语言比较难懂 跟规范写的如何没有关系 规范写的没什么问题 哪个语言标准都这样 该看不懂全都看不懂 |
|
返回顶楼 | |
发表时间:2008-07-10
刚刚看到这个问题就看到这个帖子,f() 和 new f()
我作的小实验 function car(){ this.name="toyota"; } car.prototype.say=function(){ alert(this.name); } 1.car.say() 报"此对象不支持方法" 2.car().say() 报"undefined"为空 3.new car().say() 正确 我想请教1,2为什么错,为什么错的不一样? 谢谢! 还有 function car(){ var cc=this; this.name="toyota"; this.say=function(){ alert(this.name); } return cc; } var c=car(); c.say(); 这样可以但用prototype就报错了,为什么呢? |
|
返回顶楼 | |
发表时间:2008-07-10
terrynoya 写道 function car(){ this.name="toyota"; } car.prototype.say=function(){ alert(this.name); } 1.car.say() 报"此对象不支持方法" 2.car().say() 报"undefined"为空 3.new car().say() 正确 1>.car.prototype.say=function....说明say()这个方法是只有car这个"类"所产生的对象所有的方法.并不是car这个函数的方法.Ps:"函数"和"类"是同一样东东. 在car.say=function...中.say()才是car的方法. 2>.car().say()这样使用.实际上是调用了car()这个函数.而这个函数没有返回值,未返回任何东西.所以当.say()时,会报undefined为空. 3>.参照第一条,通过new car()就产生了一个car"类"的对象.自然就可以使用say()方法了. terrynoya 写道 function car(){ var cc=this; this.name="toyota"; this.say=function(){ alert(this.name); } return cc; } var c=car(); c.say(); 这样可以但用prototype就报错了,为什么呢? 这句话问的是什么意思..?我有点没搞懂哦. |
|
返回顶楼 | |
发表时间:2008-07-10
ham 写道 terrynoya 写道 function car(){ this.name="toyota"; } car.prototype.say=function(){ alert(this.name); } 1.car.say() 报"此对象不支持方法" 2.car().say() 报"undefined"为空 3.new car().say() 正确 1>.car.prototype.say=function....说明say()这个方法是只有car这个"类"所产生的对象所有的方法.并不是car的方法. 在car.say=function...中.say()才是car的方法. 2>.car().say()这样使用.实际上是调用了car()这个函数.而这个函数没有返回值,未返回任何东西.所以当.say()时,会报undefined为空. 3>.参照第一条,通过new car()就产生了一个car"类"的对象.自然就可以使用say()方法了. terrynoya 写道 function car(){ var cc=this; this.name="toyota"; this.say=function(){ alert(this.name); } return cc; } var c=car(); c.say(); 这样可以但用prototype就报错了,为什么呢? 这句话问的是什么意思..?我有点没搞懂哦. 感谢ham的回答,函数这种2位一体很能让我这种新手弄不清方向。。呵呵 |
|
返回顶楼 | |
发表时间:2009-02-05
谢谢楼主花这么大的精力来做如此深入的研究.
再次感谢. |
|
返回顶楼 | |