我有一些我在html页面中使用的javascript代码,.js文件如下所示:
(
function(exports){
var cubism = exports.cubism = {version: "1.3.0"};
var cubism_id = 0;
function cubism_identity(d) { return d; }
...
}
)(this);
我想在基础库中添加一些新功能,所以我执行以下操作(抱歉在coffeescript中):
jQuery.extend cubism.context.prototype,
"horizon": () ->
metric = cubism_identity
问题是当我运行我得到的代码时:
Uncaught ReferenceError: cubism_identity is not defined
如何在扩展原型中访问函数cubism_identity()
?
答案 0 :(得分:0)
函数在定义的范围内可用,而不是在更高级别的范围内,除非它被特别指定为更高级别对象的属性。
按照编写代码的方式,cubism_identity()
是一个仅在function(exports){
函数体范围内可见的函数。如果您希望它在该范围之外可用,那么您必须在更高的范围内定义它然后可以使用它,或者您必须将其指定为某些更高级别对象的属性,例如window
或你自己的命名空间对象。
例如,您可以将其移至全局范围:
function cubism_identity(d) { return d; }
(
function(exports){
var cubism = exports.cubism = {version: "1.3.0"};
var cubism_id = 0;
...
}
)(this);
尽管通常最好将它放在全局命名空间对象上,这样就不会向全局范围添加超出需要的东西。
或者,相反,您可以定义在function(exports)
体内使用它的函数,以便它可以在您最初使用它的地方使用它。