锁定老帖子 主题:javascript的值,对象,原型
精华帖 (1) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2008-06-21
achun 写道
csf178 写道
还有个小细节 其实
alert({}.constructor);在FF里也是可以的 {}.constructor;会有问题也是因为词法冲突 {}不在表达式中的时候会被认作语句块(而不是对象构造) 写道
An object literal is a list of zero or more pairs of property names and associated values of an object, enclosed in curly braces ({}). You should not use an object literal at the beginning of a statement. This will lead to an error or not behave as you expect, because the { will be interpreted as the beginning of a block.
明确了这种用法是会产生错误的.这种用法也就成了语法错误了,也就是你说的解析时候造成词法冲突
嗯 是这个意思 另外 其实constructor并不是很准 因为constructor可以被修改 在FF中 __proto__ 属性是原型链 var t={__proto__:{a:1,b:2},c:3} alert(t.a);//1 alert(t.b);//2 alert(t.c);//3
在JS中 new和函数的prototype可以看作是提供了一种用原型模拟类的方式 把拥有同一个原型的一组对象看作属于一个类
|
|
返回顶楼 | |
发表时间:2008-06-25
lz想要说什么?
|
|
返回顶楼 | |
发表时间:2008-06-25
soni 写道
lz想要说什么?
我想搞清楚几件事情,经过csf178的讨论,已经清楚了.就几句话.
javascript是基于原型(prototype-based )的语言. javascript具有面向对象(Object-Oriented )的编程风格. 变量不一定是对象(undefined,null等就是特例,但是NaN是个对象) 对象一定有值,也有成员(函数,属性) Object不是顶级的,因为可以delete Object 顶级的有: Array Object new运算符具有一定的魔术性,这个说法我语言上还组织不好. |
|
返回顶楼 | |
发表时间:2008-06-25
什么叫顶级的?是不是就是语言内建的叫顶级的?
|
|
返回顶楼 | |
发表时间:2008-06-25
soni 写道
什么叫顶级的?是不是就是语言内建的叫顶级的?
预定义核心对象, 问题是内建这个词没有一个定义,Object是系统一运行就建立的,算不算内建呢? 但是Objcet肯定不算Core Objects,因为官方列表中就没有.
|
|
返回顶楼 | |
发表时间:2008-06-25
achun 写道
soni 写道
什么叫顶级的?是不是就是语言内建的叫顶级的?
预定义核心对象, 问题是内建这个词没有一个定义,Object是系统一运行就建立的,算不算内建呢? 但是Objcet肯定不算Core Objects,因为官方列表中就没有.
好像没什么区别吧 这些都可以delete Moz写的文档只是把Object单拿出来说了
不管怎么说ECMA现在比Moz更官方 ECMA现在是把它们放一起的 |
|
返回顶楼 | |
发表时间:2008-06-26
还真的是实现有很大却别呀, delete Object; alert(typeof Object); delete Function; alert(typeof Function); 还真不一样.这个世界可真乱呀!
|
|
返回顶楼 | |
发表时间:2008-06-26
ECMA对这个倒是没明确规定
但是按照ECMA262的意思 Object Function Array等并非GlobalObject的特权属性 所以应该都可以正确删除 所以虽然标准没有明确的规定 也不应该认为是implementation dependent的 FireFox在此处显然属于实现错误 因为alert(delete Function);是true 说实话 如果你读了SpiderMonkey源码 你会对它有很深的绝望 |
|
返回顶楼 | |