嵌套函数中的 JavaScript“this”指针
在 JavaScript 中,使用嵌套函数时“this”指针的值可能会令人困惑功能。与预期相反,调用嵌套函数可以将“this”指针分配给全局“窗口”对象,而不是封闭的函数。
考虑以下代码:
<code class="javascript">var std_obj = { options: { rows: 0, cols: 0 }, activeEffect: "none", displayMe: function() { // this refers to std_obj if (this.activeEffect == "fade") { } var doSomeEffects = function() { // this unexpectedly refers to the window object if (this.activeEffect == "fade") { } }; doSomeEffects(); } }; std_obj.displayMe();</code>
在此场景中,当调用嵌套函数 doSomeEffects 时,“this”指针指向“window”对象,即使它是在 std_obj 范围内声明的。这是因为 JavaScript 根据函数的调用方式来确定“this”指针。
在这种情况下,在没有前导父对象的情况下调用 doSomeEffects,这会产生全局对象(通常是“window”对象) )被分配给“这个”。要解决此问题,可以使用三种方法:
使用 call 方法调用该函数:
<code class="javascript">doSomeEffects.call(std_obj);</code>
使用 apply 方法应用函数:
<code class="javascript">doSomeEffects.apply(std_obj, []);</code>
创建绑定函数:
<code class="javascript">var boundDoSomeEffects = doSomeEffects.bind(std_obj); boundDoSomeEffects();</code>
以上是如何在嵌套 JavaScript 函数中保留'this”指针的详细内容。更多信息请关注PHP中文网其他相关文章!