2015-04-20 4 views
0

У меня, кажется, большая проблема. У меня есть Javascript-файл, назовем его helloworld.js. Я не могу редактировать этот файл вообще. Однако внутри есть функция с именем function buildDropdown(){}.Переопределение функций Javascript?

Мне нужно внести изменения в эту функцию, не редактируя файл. Я могу добавить еще один .js-файл после загрузки файла helloworld.js или до него. Я предполагаю, что должен быть способ написать файл patch .js для переопределения function buildDropdown(){}. Есть ли простой способ в js сказать ему игнорировать предыдущие function buildDropdown(){} и использовать мой function buildDropdown(){}, который переопределяет его?

+4

Последняя определенная функция будет окончательной версией. – MaxZoom

+1

есть ответы, быстрый google получил бы вас эти http://stackoverflow.com/questions/296667/overriding-a-javascript-function-while-referencing-the-original http://stackoverflow.com/вопросы/19301516/переопределения-JS-функция-из-другой-файл –

ответ

1

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

<script src="helloworld.js"> 
    function buildDropdown(){ 
     /* Old Function */ 
    } 
</script> 
... 
<script src="yourScript.js"> 
    function buildDropdown(){ 
     /* New code here */ 
    } 
</script> 
1

Просто укажите ваш после оригинала. Предполагая, что вам не нужно ничего хранить в оригинале. Если да. , , как если вам нужно обернуть его в чем-то другом, например, вы можете сделать что-то вроде этого:

var origBuildDropdown = buildDropdown; 
function buildDropdown() { 
    // Do pre-function stuff 

    // Invoke original function 
    origBuildDropdown(); 

    // Do post-function stuff 
} 
1

Несколько ответов уже объяснили, как делать то, что вы хотите, но, похоже, стоит объяснить ПОЧЕМУ.

Каждая функция javascript, которую вы (или какой-либо случайный файл сценария, который вы загружаете) определяет только объект. Это объявление переменной. Таким образом, он может быть переопределен во время выполнения. Вы можете, если на то пошло, делать это динамически ... самомодифицирующийся код вполне возможен, хотя это не значит, что это часто хорошая идея.

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

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