为什么原生.bind()这么慢?

为什么原生.bind()这么慢?

我有根据的猜测是,它克隆了您正在使用的对象,但替换了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);​

🌸 相关推荐

哪里能买到正版红警?最全购买平台推荐及对比
彩票365软件是什么样的

哪里能买到正版红警?最全购买平台推荐及对比

📅 08-01 👀 9451
句字笔画写法
28365备用网址

句字笔画写法

📅 10-02 👀 4696
馽缚的意思
彩票365软件是什么样的

馽缚的意思

📅 07-30 👀 3067