2012-08-29 21 views

回答

7

它抓取Object.prototype.toString方法的本地副本,这将允许它在脚本中进行小幅度的改进。这也允许它测试toString方法的存在。

问候评论:

每个名称解析是有成本的,在查找时(当地人,全局,原型链)和创造(关闭范围的变量),所以成像下面的代码:

var values = // Create some object here. 

for (var i = 0; i < count; i++) { 
    console.log(values[i].toString()); 
} 

对于外观的每一次迭代,我们必须解决values变量,然后通过原型链来确定成员toString,然后执行该操作。

考虑的是上面的例子,我们可以做到以下几点:

var toString = {}.toString, 
    values = // Create some object here. 

for (var i = 0; i < count; i++) { 
    console.log(toString.call(values[i])); 
} 

甚至更​​远:

var toString = {}.toString, 
    log = console.log, 
    values = // Create some object here. 

for (var i = 0; i < count; i++) { 
    log.call(console, toString.call(values[i])); 
} 

轻应用不会真的从中受益太多,但更大的框架,例如因为jQuery等可以显着提高脚本性能。 IE我相信是一个这样的浏览器,这些小的改进可以帮助很多。

+0

由于避免沿着原型链(“Modernizr”对象)上下移动而导致的改进? –

+0

我想知道我们有多快的速度提升? – portoalet

+0

评论的更新回答。 –

1

它检查是否与给定的环境下有默认的对象上定义一个toString属性。它不会在新的Object()上执行,因为Object本身可能不会在环境中定义。