我有根据的猜测是,它克隆了您正在使用的对象,但替换了object的底层原型。而不是使用页面呈现代码中的通用预编译对象,它现在必须接受两件事:
传递的变量是这样的。分析它,克隆它。然后将要调用的指定函数注入到新对象中。然后在新对象中执行函数。之后,如果不再调用,请将其清理干净。
对象的范围循环越复杂、范围越大,绑定所需的时间就越长,因为引擎需要遍历所有函数和参数的范围树,以查看需要复制的内容。
您已经在使用作用域,这是我强烈建议的。它的内存密集度较低,并且引擎不必复制对象然后调用函数。您还可以获得额外的好处,即可以从这两个对象访问属性。
根据我的经验,绑定从来都不是真正需要的。只需对属性使用setter和getter,否则限定作用域的变量并不总是在主对象中更改。
以下面的代码片段为例
代码语言:javascript运行复制function domagic() {
this.myproperty = "Hello ";
}
domagic.prototype = {
perform:function(){
var that = this;
var hello = "World";
setTimeout(function(){
// this in this contect is whatever runs timeout. not domagic
// I use this for jQuery and my own objects to get best
// of both worlds, but I always post a comment in a scope
// to remind myself what this and that refers to.
window.alert(that.myproperty+hello);
that.set("Goodbye ");
},2000);
},
set : function(what) {
this.myproperty = what;
}
};
magic = new domagic();
magic.perform();
setTimeout(function(){magic.perform();},2000);