JavaScript:如何设置函数的属性?

时间:2011-04-26 14:04:08

标签: javascript unit-testing function properties mocking

我正在测试我的一个函数,我想测试是否使用该代码中的正确参数调用特定函数。

出于这个原因,我覆盖了这样的原始函数:

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

然后我执行它并检查属性sort.arrayToSort是否设置为我传入的值并重新分配原始函数:

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

但是,我无法像这样访问sort.arrayToSort。如何设置函数的属性以使其成为可能?现在,我正在声明一个变量高于sort函数并设置它,但我宁愿将它作为函数的属性来保持其范围较小。这可能吗?

2 个答案:

答案 0 :(得分:2)

听起来像你想要的arguments.callee,它指的是函数本身,而不是它所绑定的对象。

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

答案 1 :(得分:0)

如果您不使用新关键字创建函数属性,则无法访问函数属性。

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
}