如果你在一个匿名函数中定义了一个对象——你如何使用它?
If you define an object in an anonymous function -- how do you use it?
我正在看这个教程。我知道它正在使用匿名函数,从这个答案:为什么需要在同一行调用匿名函数?
我理解函数末尾的()将自动执行前面的函数——将(this)作为参数传递。我理解函数中的(this)是指全局的this。
我理解人们使用匿名函数模式来防止全局命名空间中的污染。
但是,我不明白你将如何使用在匿名函数中定义的母牛。例如,在python中,如果你导入一个名为from cow import cow
的类,你可以导入Cow(name)
。或者在java中输入new Cow (name)
如果你在一个匿名函数中定义了一个cow(为了保护全局命名空间)——你如何使用它?
注意
exports.Cow = Cow;
为exports
(主叫代码为this
)增加一个Cow
属性。因此,调用匿名函数时,无论this
是什么,当函数返回时,都将具有Cow
属性(即构造函数)。
编辑:对于那些谁想要的例子直接在他们面前,这是代码从OP的链接,是相关的问题:
(function(exports) {
"use strict";
function Cow(name) {
this.name = name || "Anon cow";
}
exports.Cow = Cow;
Cow.prototype = {
greets: function(target) {
if (!target)
throw new Error("missing target");
return this.name + " greets " + target;
}
};
})(this);
结果将以与执行以下代码后使用Cow
完全相同的方式使用:
var Cow = function (name) {
this.name = name || "Anon cow";
}
Cow.prototype = {
greets: function(target) {
if (!target)
throw new Error("missing target");
return this.name + " greets " + target;
}
};
唯一的区别是(在这种情况下)匿名函数函数在严格模式下求值,而不管全局设置如何,而不改变全局设置。在这两种情况下,您都可以这样做:
var aCow = new Cow("Buttercup");
aCow.greet("Farmer Johnson");
输出:毛茛问候农民约翰逊
该代码所做的是定义一个Cow
对象,然后通过以下行:
exports.Cow = Cow;
上面这行给window
对象添加了一个Cow
属性,这个属性的值就是对象的构造函数。
window
在浏览器中是全局的,所以可以在另一个文件中创建新的Cow
对象:
var cow = new Cow();
允许匿名函数返回结果,就像任何其他函数一样。如果需要将创建的项导出到全局名称空间,只需返回它们,如下所示:
var newglobal = (function() {
var foo = {
};
return foo;
}());
当您不使用支持导出概念的包时,这是标准方法。
或者,如果您知道您将在浏览器上下文中运行,您还可以选择在窗口对象上创建属性,因为它们总是添加到全局对象中。
- 从HTTPGET返回一个自定义对象列表,以便在Angular 2应用程序中使用
- 所以这是说我的法定对象中有一个未定义的变量
- 如何调用另一个js文件中的函数或触发一个自定义事件,该事件将参数作为Jquery中的数据对象传递
- Javascript:我如何定义一个对象'的属性
- 我对javascript中的一个自定义函数感到困惑,该函数将对象作为参数获取
- Javascript:如何附加到构造函数的原型,如果该构造函数已经在另一个对象的原型上定义
- 在 JavaScript 中定义一个对象
- 无论如何,在Visual Studio智能感知中定义一个未定义的对象
- “未定义”不是一个对象
- JavaScript - 尝试从另一个对象内部访问一个对象方法,得到未定义的错误
- JavaScript 和 jQuery,创建和使用一个对象.属性返回未定义
- JS说我有一个未定义的对象.真的需要一些帮助来解决这个问题吗
- 将定义的对象传递给另一个自定义指令angularjs
- 如何创建一个自定义的java脚本警报,并在我的asp.net MVC中向它传递一个对象属性
- JQuery函数返回一个对象,但它被集成为未定义对象
- JavaScript:我可以使用属于同一对象的另一个属性来定义一个对象的属性吗
- 在 Javascript 中将一个自定义对象强制转换为另一个自定义对象
- 一个有内容的iFrame怎么可能有一个未定义的contentDocument对象
- Javascript JSON解析对象,一个对象属性未定义,没有抛出错误
- 我如何定义一个对象与变量