JavaScript: Как установить свойство для функции? - PullRequest
2 голосов
/ 26 апреля 2011

Я тестирую одну из своих функций и хочу проверить, вызывается ли конкретная функция с правильным аргументом из этого кода.

По этой причине я перезаписываю исходную функцию следующим образом:

var oldSort = sort;
sort = function(array) {
    this.arrayToSort = array;
}

Затем я выполняю его и проверяю, что для свойства sort.arrayToSort установлено значение, которое я передал, и переназначаю исходную функцию:

sort(myArray);
deepEqual(myArray, sort.arrayToSort); 
sort = oldSort;

Однако я не могу получить доступ к sort.arrayToSort таким образом. Как я могу установить свойство функции, чтобы сделать это возможным? Прямо сейчас я объявляю переменную над функцией сортировки и задаю ее, но я бы предпочел, чтобы она была свойством функции, чтобы ее область была небольшой. Это возможно?

Ответы [ 2 ]

2 голосов
/ 26 апреля 2011

Звучит так, как вы хотите arguments.callee, что относится к самой функции, а не к объекту, с которым она была связана.

var oldSort = sort;
sort = function(array) {
    arguments.callee.arrayToSort = array;
}
0 голосов
/ 26 апреля 2011

вы не можете получить доступ к свойствам функции, если не создадите ее с новым ключевым словом.

mysort = new sort(array);
alert(mysort.arrayToSort);

Вы можете использовать пользовательскую функцию сравнения в оригинальной сортировке. как это

array.sort(sortfunction)

function sortfunction(a, b){
   //Compare "a" and "b" in some fashion, and return -1, 0, or 1
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...