Правильное использование функций в библиотеке JS
Прямо сейчас я пытаюсь создать библиотеку JavaScript, хотя она очень ювенильна, и я уверен, что ее можно переработать, чтобы она работала лучше. Однако в настоящее время я храню некоторые из моих наиболее распространенных функций, которые я обычно использую (при рендеринге анимации HTML5 Canvas), и у меня есть вышеупомянутые функции JavaScript, хранящиеся в их собственном плоском файле с именем canvasLab.js. Моя текущая структура такова:
var canvasLab = {
setCanvas: function(elem) {
if (elem == undefined) {
return Modernizr.canvas;
}
return document.getElementById(elem);
},
set2D: function(elem) {
return elem.getContext('2d');
},
... и все работает нормально, пока я не попытаюсь объявить функцию в другой функции:
getColorGradient: function(freqR,freqG,freqB,phaseA,phaseB,phaseC,center,width,length) {
if (center == undefined) center = 128;
if (width == undefined) width = 127;
if (length == undefined) length = 50;
colorArray=[];
frequency = 0.3;
amplitude = 127;
center = 128;
byte2Hex: function(n) {
nybHexString = '0123456789ABCDEF';
return String( nybHexString.substr( ( n >> 4 ) & 0x0F, 1 ) ) + nybHexString.substr(n & 0x0F, 1);
},
getRgb: function(r,g,b) {
return '#' + byte2Hex(r) + byte2Hex(g) + byte2Hex(b);
},
getGradientArray: function() {
for (var i=0; i<length; ++i) {
red = Math.sin(freqR * i + phaseA) * width + center;
green = Math.sin(freqG * i + phaseB) * width + center;
blue = Math.sin(freqB * i + phaseC) * width + center;
result = getRgb(red,green,blue);
this.colorArray[i] = result;
}
}
}
когда я получаю сообщение об ошибке "неожиданный токен" (строка 45:
byte2Hex: function(n) {
Я в некотором роде новичок в создании библиотек JavaScript (или Lib Objects), и я до сих пор не уверен в том, какие методы и синтаксис лучше использовать при разработке библиотеки. Больше всего меня беспокоит то, что он легкий внутри, на компьютере клиента и в браузере. В любом случае я не понимаю, почему я не могу создать новый метод (например, byte2Hex()) и создать его экземпляр через родительский объект. Любая критика, безусловно, будет оценена.
1 ответ
Вы определяете свою функцию так, как если бы она находилась в области видимости объекта
byte2Hex: function(n)
Эта строка должна сказать
byte2Hex = function(n)....
Эти две функции ниже также имеют ту же проблему
Если вы хотите вернуть их как методы, они должны быть обернуты в объект.
return {
getRgb: function(r,g,b) {
return '#' + byte2Hex(r) + byte2Hex(g) + byte2Hex(b);
},
getGradientArray: function() {//...
}
};
У вас также есть тонна ссылок, которые не ограничены областью применения оператора var.
Чтобы помочь вам найти, отследите эти типы ошибок, попробуйте вставить ваш код в: