0

我在我的 html 页面中使用了一些 javascript 代码,.js 文件如下所示:

(
function(exports){
  var cubism = exports.cubism = {version: "1.3.0"};
  var cubism_id = 0;
  function cubism_identity(d) { return d; }
  ...
}
)(this);

我想为基础库添加一些新功能,所以我执行以下操作(对不起,咖啡脚本):

jQuery.extend cubism.context.prototype,
   "horizon": () ->
       metric = cubism_identity

问题是当我运行我得到的代码时:

Uncaught ReferenceError: cubism_identity is not defined 

如何访问cubism_identity()扩展原型中的功能?

4

1 回答 1

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)以便它可以在您最初拥有它的地方使用它。

于 2013-07-01T01:50:49.967 回答