2013-07-01 2 views
0

я быть_наст яваскрипт код, который я использую в своей HTML-страницах, то .js файл выглядит следующим образом:JQuery продлить прототип

(
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

Разве это 'cubism_identity' доступно вне этого модуля? Пожалуйста, покажите нам код, в котором он экспортируется. Если нет, вам придется отредактировать файл базовой библиотеки. – Bergi

ответ

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), чтобы он мог использовать ее прямо там, где у вас ее было.

Смежные вопросы