jquery对原型的扩展

jquery extend of prototype

本文关键字:扩展 原型 jquery      更新时间:2023-09-26

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

函数在其定义的范围内可用,而不是在更高级别的范围内,除非它被指定为更高级别对象的属性。

按照您编写代码的方式,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)主体中定义使用它的函数,这样它就可以在您最初拥有它的地方使用它。