jquery扩展原型

时间:2013-07-01 01:43:51

标签: javascript function extend

我有一些我在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()

1 个答案:

答案 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)体内使用它的函数,以便它可以在您最初使用它的地方使用它。