【发布时间】:2014-01-10 14:23:38
【问题描述】:
下面的 JavaScript 代码将一个字母数字数组打印成两个数组,一个字母,一个数字。
我使用了原型函数和对象的“复杂”系统。
var utils = {
sdNum: function(a, b) {
return b-a;
},
saNum: function(a, b) {
return a-b;
}
};
var Separator = function() {
this.aNum = Array();
this.aChar = [];
};
Separator.prototype.getNum = function() {
for(var i = 0; i < this.alphanumeric.length; i++ )
if(this.alphanumeric[i] === parseInt(this.alphanumeric[i]))
this.aNum.push(this.alphanumeric[i]);
return this.aNum;
};
Separator.prototype.getChar = function() {
for(var i = 0; i < this.alphanumeric.length; i++ )
if(this.alphanumeric[i] !== parseInt(this.alphanumeric[i]))
this.aChar.push(this.alphanumeric[i]);
return this.aChar;
};
Separator.prototype.sortNum = function(sorting = 'asc', va = this.getNum()) {
if(sorting === 'asc')
return va.sort(utils.saNum);
return va.sort(utils.sdNum);
};
Separator.prototype.sortChar = function(sorting, va = this.getChar()) {
if(sorting === 'asc')
return va.sort();
return va.reverse();
};
var PrintSeparator = function(alphanumeric) {
this.alphanumeric = alphanumeric;
};
PrintSeparator.prototype = new Separator();
PrintSeparator.prototype.printChar = function(sorting = 'asc') {
var tmp_str = '';
tmp_str += '<h2><em>' + sorting + '</em> letter sorting</h2>',
tmp_str += '<p>' + this.sortChar(sorting).join(' - ') + '</p>';
return tmp_str;
}
PrintSeparator.prototype.printNum = function(sorting = 'asc') {
var tmp_str = '';
tmp_str += '<h2><em>' + sorting + '</em> number sorting</h2>',
tmp_str += '<p>' + this.sortNum(sorting).join(' - ') + '</p>';
return tmp_str;
}
当我调用一个函数来检索结果时,一切正常。
var mixedArray1 = new PrintSeparator([11, 'a', 'g', 3, 8, 'c', 'b', 12, 9, 'd', 'f', 10, 'i', 2, 1, 7, 5, 'e', 'h', 4, 6]);
document.write(mixedArray1.printChar('desc'));
当我将上面的主脚本包含到 js 文件中时,NetBeans 在这个函数上出错:
Separator.prototype.sortNum = function(sorting = 'asc', va = this.getNum()) {
错误是Expeted , but found =
相反,如果我在 html 页面中包含相同的脚本,则不会出现错误。
如果我调用 js 页面 <script src="myscript.js"></script> 总是会出现 NetBeans 错误但它工作正常,如果我调用同一页面 <script src="mysqcript.js"/> id 不起作用。
有人可以解释一下原因吗?
【问题讨论】:
-
javascript中没有默认参数。 NetBeans 是对的,这个声明根本无效。不知道这会如何工作。
-
@Bergi 疯狂的是它确实如此,但它绝对不是推荐的方法。见:jsfiddle.net/e4c7F
-
还要注意你在做inheritance wrong,你所有的
PrintSeparators都会share theiraNumandaChararray。
标签: javascript prototype prototypal-inheritance prototype-programming