2013-10-14 7 views
3

Есть ли способ узнать, будет ли изменена или переопределена функция, которую я написал? Например, скажем, парень по имени Джек имеет функцию ниже:Есть ли способ узнать, написана ли функция в JavaScript?

// Jack's function on team 1 
function doSomething() { 
    // doing things 
} 

и один день, когда он узнает, что товарищ по команде на северном полюсе планеты Zaxxon использовал такое же имя функции:

// Zaxar's function on team 2 
function doSomething() { 
    // doing something else 
} 

Как видите, Заксар и Джек используют одно и то же имя функции. Ни Заксар, ни Джон не обнаружили проблему до 6 месяцев в проекте. Они знают, что могут поставить предупреждение в свою функцию и проверить его во время выполнения, но скажем, что у Заксара и Джека есть 2 триллиона функций, и они используют 1 миллион библиотек JavaScript, и они понимают, что нецелесообразно размещать предупреждения в каждой функции.

Есть ли способ помочь Заксару и Джеку узнать, есть ли какие-либо столкновения имен во время выполнения? Или есть параметр, который подскажет движку JavaScript о том, чтобы вызывать ошибки при столкновении имен?

Больше информации
я загружаю в нескольких библиотеках, и я думаю, что один из них используют то же имя функции, как и я. Таким образом, в этом примере действительно нет другого разработчика, с которым я могу коррелировать. Он выясняет, используются ли библиотеки, которые я загружаю, с использованием тех же имен функций и предотвращения того, что подобное происходит по линии.

+1

Возможно, JSHint поможет? dunoo ... Но мой совет, они отдельно проходят код и помещают все функции в объект (пространство имен) и заменяют все вызовы префиксом. Это не займет много времени с достойным редактором. – elclanrs

+2

Реальное решение было бы для каждого разработчика или каждой части проекта работать в собственном пространстве имен. – jfriend00

+2

Подходящий выбор имени и хорошая коммуникация позволят избежать таких проблем. Предположительно, если они работают над одним и тем же проектом и имеют функцию с тем же именем, то он делает то же самое. Поэтому нужно удалять из проекта. Если проект дошел до этого с большой проблемой, это провал управления проектами (связь, дизайн и тестирование все провалились). – RobG

ответ

1

Хотя предположение о том, как пространствах имен уместно, вы также можете быть заинтересованы в writable и configurable свойствах Object.defineProperty дескрипторов, если вы хотите, чтобы предотвратить перезапись специфических функций:

Object.defineProperty(window, "myUnchangeableFunction", {value: function() { 
    alert("Can't change me"); 
}, writable: false, configurable: false}); 

/* 
function myUnchangeableFunction() { // TypeError: can't redefine non-configurable property 'myUnchangeableFunction' 
    alert('change?'); 
} 

var myUnchangeableFunction = function() { // TypeError: can't redefine non-configurable property 'myUnchangeableFunction' 
    alert('change?'); 
}; 
*/ 

myUnchangeableFunction(); 

Вы должны проверить поддержку в браузерах вы хотите поддержать, однако, поскольку некоторые старые браузеры могут не поддерживать эту функциональность.

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