以下是我写的代码
var nums = [1, 5, 4, 2, 3];
var sortedNums = [1, 2, 3, 4, 5];
var sorter = function MakeSorter() {
'sortNums': function(nums) {
return this.nums.sort();
};
};
QUnit.test("Numeric list can be sorted", function(assert) {
var sorted = sorter.sortNums(nums);
assert.deepEqual(sorted, sortedNums, "Passed!");
});
我的假设如下:
sorter是一个引用MakeSorter()函数的函数对象
sortNums是MakeSorter的一个属性,它被证明是一个对象,因此具有函数语法
但它会产生预期的错误“;”在宣布sortNums的行上。为什么?
答案 0 :(得分:1)
也许您打算使用this
:
var nums = [1, 5, 4, 2, 3];
var sortedNums = [1, 2, 3, 4, 5];
var MakeSorter = function () {
this.sortNums = function(nums) {
return this.nums.sort();
}
};
var sorter = new MakeSorter();
QUnit.test("Numeric list can be sorted", function(assert) {
var sorted = sorter.sortNums(nums);
assert.deepEqual(sorted, sortedNums, "Passed!");
});
您似乎认为在JavaScript中,函数是对象,但略有不同。你想要做的是有点像JavaScript类。您正在使用常规功能,而不是对象。为了向函数添加函数,请使用this
。这是简短的:
var MakeSorter = function () {
//...
}
MakeSorter.sortNums = function (nums) {
//...
}
答案 1 :(得分:0)
这会将sortNums
上的属性sorter
设置为您提供的函数。但是,我并不完全确定您在完成此操作时要做的是什么,并且可能有更好的方法来设计您尝试完成的行为。
var nums = [1, 5, 4, 2, 3];
var sortedNums = [1, 2, 3, 4, 5];
var sorter = function MakeSorter() {};
sorter.sortNums = function(nums) {
return this.nums.sort();
};
QUnit.test("Numeric list can be sorted", function(assert) {
var sorted = sorter.sortNums(nums);
assert.deepEqual(sorted, sortedNums, "Passed!");
});
简而言之,您的语法错误似乎是您正在将函数体声明与对象文字混合在一起。函数体内的语句({
和}
之间)在调用函数时执行。您无法通过在对象文字语法{ prop : value }
中添加属性来定义函数的属性。
var sorter = {
sortNums: function(nums) {
return this.nums.sort();
}
};
如果分拣机不需要可调用,可能更符合您的要求。