在Bluebird的util.js
文件中,它具有以下功能:
function toFastProperties(obj) {
/*jshint -W027*/
function f() {}
f.prototype = obj;
ASSERT("%HasFastProperties", true, obj);
return f;
eval(obj);
}
Run Code Online (Sandbox Code Playgroud)
出于某种原因,在返回函数之后有一个声明,我不知道它为什么存在.
同样,它似乎是故意的,因为作者已经沉默了JSHint对此的警告:
'return'后无法访问'eval'.(W027)
这个功能到底是做什么的?难道util.toFastProperties
真的让一个对象的属性"快"?
我在Bluebird的GitHub存储库中搜索了源代码中的任何注释或者问题列表中的解释,但我找不到任何注释.
据我所知,当您删除对象上的条目时,使用Javascript,至少使用chrome,它会将对象置于"字典模式"或"慢速模式"
例:
var user = { name: 'connor', sex: 'male' };
// user is in "fast mode"
delete user.sex;
// user is in ("slow" or "dictionary") mode
Run Code Online (Sandbox Code Playgroud)
什么时候这可能是有益的,何时可能是有害的?
一个具体的案例是,我有一个对象,当应用程序启动时,对象是空的,但是当代码运行并且应用程序内存建立时,它可能会变得非常大,并且对象永远不会减小,直到应用程序关闭它不会存在.
这种模式还有任何语义吗?