javascript - jQuery 函数扩展的范围问题

标签 javascript jquery extend

我正在尝试扩展一个对象,并且该对象包含多个函数。我无法解释它,所以让我向您展示我的代码。让我们从有效的开始:

(function ($) {
    $.fn.extend({
        Hello: function() {
            console.log("Well, hello back!");
            console.log($(this));
        }
    });
})(jQuery);

在 HTML 中:

<script>
    $(document).ready(function() {
        $('.target').Hello();
    });
</script>

如预期的那样,$(this) 的控制台日志为我提供了被调用方元素“target”。

现在,让我们尝试一下:

(function ($) {
    $.fn.extend({
        Response: {
            Hello: function() {
                console.log("Well, hello back!");
                console.log($(this));
            }
        }
    });
})(jQuery);

在 HTML 中:

<script>
    $(document).ready(function() {
        $('.target').Response.Hello();
    });
</script>

这还是吐槽“嗯,你好回来了!”在控制台中,但是当我使用 $(this) 时我不再得到被调用者。我得到的是 Hello 函数。

如何获得被调用者?我已经尝试过 this.parent,但它不起作用。请帮忙!

最佳答案

正如其他人所指出的,您无法真正做到您所要求的,但您可以做一些看起来几乎相同的事情。

通过用闭包捕获“this”,您可以在对象结构中进一步访问它:

$.fn.extend({
    Response: function () {
        var self = this;
        return {
            Hello: function () {
                console.log(self);
            }
        };
    }
});

$('.target').Response().Hello();

关于javascript - jQuery 函数扩展的范围问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23481915/

相关文章:

jquery - 创建叠加层以发送消息

javascript - 有没有办法阻止 html 页面内的外部 javascript/bookmarklet 执行?

javascript - Jquery 添加椭圆 (...) 并根据高度而非宽度 chop 文本

javascript - JQuery 在 mouseenter 和 mouseleave 上无法正常工作

javascript - Chrome jquery .animate() 留下 'movement' 行

具有固定高度的 jQuery slimScroll 滚动条

javascript - $.extend 排除一些 JSON 对象

python - 将列表扩展到 Python 中的 json 文件

javascript - 变量变成函数

php - 使 DateTime::createFromFormat() 返回子类而不是父类