gpt4 book ai didi

javascript - 包装库 | jQuery 与 Backbone

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:51:48 26 4
gpt4 key购买 nike

这是 Backbone包装器

(function(){
// Backbone.js
}).call(this);

用于比较。这是 jQuery包装器:

(function( window, undefined ) {
// jQuery.js
})( window );

关于 BackBone Wrapper:

我理解需要立即调用(通过调用)函数表达式 - 以提供隐私(封装)

我明白为什么它是一个匿名函数——减少全局符号。

但是我不明白'this'指的是什么? + 为什么 wrapper 不同?

引用

MDN - this

最佳答案

它有助于在内部函数中保留 this 的值。

调用未绑定(bind)函数*会将 this 重置为全局对象,即浏览器中的 window

参见 this example :

(function () {
alert("1: " + this); // this == myObject

(function () {
alert("2: " + this); // this == window
})();

(function () {
alert("3: " + this); // this == myObject
}).call(this);
}).call(myObject);

*) 即调用 func() 而不是 obj.func()。在后一种情况下,this 将变为 obj


首先澄清:

在 backbone.js 的情况下,他们将代码包装在 (function () {...}).call(this) 中的原因是这样你不需要知道全局对象的实际名称(global 在 node.js 的情况下)。

参见 http://backbonejs.org/docs/backbone.html#section-4


第二次澄清:

如果脚本由浏览器运行,如果您不在绑定(bind)函数的调用上下文中,则thiswindow 是同一个对象。在独立的 JS 引擎(node、rhino …)中,全局对象不是命名为 window,而是命名为 global

jQuery 开发人员知道您想在浏览器中运行他们的脚本,因为如果您一开始就没有要操作的文档,您将无法从中获得乐趣。

Backbone.js,如 underscore.js , 是通用的,因此开发人员不知道全局对象的名称。他们不在乎。

所以当 jQuery 做的时候

(function (window) {
...
})(window);

也可以这样实现

(function () {
var window = this;
...
}).call(window);

因为 this===window

(function () {
var window = this;
...
}).call(this);

向后阅读示例,看看 Backbone 黑客做了什么。 (他们将全局对象称为 root。您可能需要阅读带注释的代码。)

我会选择

(function (root) {
...
})(this);

但我想最终这并不重要。

关于javascript - 包装库 | jQuery 与 Backbone,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11907436/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com