来自http://www.jibbering.com/faq/faq_notes/closures.html:
注意:ECMAScript定义内部Object类型的内部[[prototype]]属性.使用脚本无法直接访问此属性,但它是使用在属性访问器解析中使用的内部[[prototype]]属性引用的对象链; 对象的原型链.存在公共原型属性以允许与内部[[prototype]]属性相关联的原型的分配,定义和操作.ECMA 262(第3版)中描述了两者之间关系的细节,超出了本讨论的范围.
两者之间的关系有哪些细节?我浏览了ECMA 262,所有我读过的内容都是:
构造函数的关联原型可以由程序表达式constructor.prototype引用,
本机ECMAScript对象具有名为[[Prototype]]的内部属性.此属性的值为null或对象,用于实现继承.
每个内置函数和每个内置构造函数都有Function原型对象,它是表达式Function.prototype的初始值.
每个内置原型对象都有Object原型对象,它是表达式Object.prototype(15.3.2.1)的初始值,作为其内部[[Prototype]]属性的值,除了Object原型对象本身.
从这一点我收集到的是[[Prototype]]属性相当于prototype
几乎任何对象的属性.我错了吗?
我正在寻找ECMAScript国际化API的垫片.有谁知道这样的项目?(即使它目前仍在进行中.)
javascript internationalization ecma262 ecmascript-5 ecmascript-intl
我试图找到一个很好的EBNF描述ECMAScript,但到目前为止我还没有发现任何完整的.
有任何想法吗?
我目前使用Eclipse作为其他语言的IDE,而我习惯于不必离开IDE用于任何事情 - 但是我真的很难找到纯ECMAScript-262的相同或类似的设置.
为了澄清,我不是在寻找DOM支持,jquery,HTML或类似的东西,最好只是一个内置ECMAScript-262支持(pref node.js)的IDE(调试并不重要),这样我就可以简单地运行我的代码了IDE.
有任何想法吗?
ps:请不要建议aptana.
好的,我们都知道有效的左侧表达式是什么.的种类.*
但是,看看ECMA-Script标准的定义,我很困惑:
LeftHandSideExpression :
NewExpression
CallExpression
Run Code Online (Sandbox Code Playgroud)
这只是定义中的错误,还是我在这里弄错了?我的意思是,这实际上并不意味着
new Object = 1; // NewExpression AssignmentOperator PrimaryExpression
function () { return foo; }() = 1;// CallExpression AssignmentOperator PrimaryExpression
Run Code Online (Sandbox Code Playgroud)
应该是有效的赋值表达式?
*从我谦虚的理解,这将更有意义:
LeftHandSideExpression :
Identifier
MemberExpression [ Expression ]
MemberExpression . IdentifierName
CallExpression [ Expression ]
CallExpression . IdentifierName
Run Code Online (Sandbox Code Playgroud)
我注意到v8在ECMAScript第5版问题上相当沉默.
V8按照ECMA-262第3版中的规定实施ECMAScript,并在Windows XP和Vista,Mac OS X 10.5(Leopard)以及使用IA-32或ARM处理器的Linux系统上运行.
即使是bug跟踪器似乎很安静......
V8是ECMAScript的实现,而不是JavaScript.后者是Mozilla制作的ECMAScript的非标准化扩展.V8旨在与JSC(WebKit/Safari中的ECMAScript实现)兼容插件.因此,它实现了许多ECMAScript的非标准扩展,这些扩展也在JSC中,其中大多数也是Mozilla的JavaScript语言.没有计划添加JSC中没有的非标准功能到V8.
有趣的是,他在2010年10月8日撰写了这篇文章,当时ECMAScript 5于2009年12月发布,两个月前发布了Javascript 1.8.5(ECMAScript 5的超集).
那么问题仍然是谷歌何时更新v8以在ECMAScript第5版上运行?是否有计划升级到最新的ECMAScript标准化?
根据第6版JavaScript:The Definitive Guide(Flanagan,2011):
ECMAScript v3指定替换参数
replace()
可以是函数而不是字符串.
我正在研究2005年编写的一些代码,其中使用了一个复杂的解决方法来替换字符串的一部分.代码的注释清楚地表明它最初使用的是功能replace()
方法,但是解决方法对于跨浏览器兼容性是必需的.
ECMAScript v3于1999年问世,据我所知(从这篇论文和本篇博文中可以看出),自2001年底以来,ECMAScript v3在主流浏览器中得到了支持.作者是错误的,还是有人可以解释一下为什么2005年可能需要这样的解决方案?
...
更新代码作者的实际评论说:
RegExps中的lambda函数目前是太多浏览器的问题.
改变了代码来解决问题.
作者代码适用于或运行此业务,尽管代码本身可能是个人项目.
我一直在研究ECMAScript规范,并发现它非常难以阅读和理解.我经常不得不回溯以保持头脑中的概念.在阅读C#规范时,我能够学习该语言的组件而无需不断地移动文档.
查看javascript类型我试图找出某些数据类型的最大存储大小.例如,我设置了一个快速递归算法来增加var大小,直到浏览器崩溃,最终在我现有版本的chrome上的字符串接近128mb(或者可能是256).
我一直在做这个痛苦的方式,因为我找不到任何关于此的规格,但是持续的浏览器崩溃使得这是一个痛苦的试验(尝试捕获因某些原因在这个特定问题上似乎无用).
我正在寻找有关其他类型的最大存储大小的信息(数组,对象,函数,字符串,数字,bools ......)
EMCA-262第8.4节对此持模糊态度
String的长度是其中的元素数(即16位值).空String的长度为零,因此不包含任何元素.
...所以也许这是需要在浏览器中实现的东西?
然而,ECMA会告诉我们有关数字的信息,例如
Number类型具有18437736874454810627(即2 ^ 64-2 ^ 53 + 3)值,表示IEEE标准二进制浮点运算中指定的双精度64位格式IEEE 754值,但9007199254740990(即,2 ^ 53-2)IEEE标准的不同"非数字"值在ECMAScript中表示为单个特殊NaN值.
但后来我没有看到任何关于物体的东西.
我可以期待在浏览器中使用什么?是否有任何代码库可以帮助管理非常大的对象和字符串?
我可以在一个脚本中分配多少内存?
今天我与同事讨论了Javascript中的嵌套函数:
function a() {
function b() {
alert('boo')
}
var c = 'Bound to local call object.'
d = 'Bound to global object.'
}
Run Code Online (Sandbox Code Playgroud)
在这个例子中,试验指出b在a的体外是不可达的,就像c一样.但是,d是 - 执行a()之后.在ECMAScript v.3标准中寻找这种行为的确切定义,我没有找到我正在寻找的确切措辞; 第13节第71页没有说明,是函数声明语句创建的函数对象要绑定到哪个对象.我错过了什么吗?