【问题标题】:Javascript - Prototype array printing test errorJavascript - 原型数组打印测试错误
【发布时间】: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 页面 &lt;script src="myscript.js"&gt;&lt;/script&gt; 总是会出现 NetBeans 错误但它工作正常,如果我调用同一页面 &lt;script src="mysqcript.js"/&gt; id 不起作用。

有人可以解释一下原因吗?

【问题讨论】:

标签: javascript prototype prototypal-inheritance prototype-programming


【解决方案1】:

表达式不应放在函数的声明中。如果您必须为参数分配默认值,请在函数内部进行。

        Separator.prototype.sortNum = function(sorting) {
            sorting = (sorting) ? sorting: 'asc';
            var va  = this.getNum();
            if(sorting === 'asc')
                return va.sort(utils.saNum);

            return va.sort(utils.sdNum);
        };  

同样适用:

    Separator.prototype.sortChar = function(sorting) {
        var va = this.getChar();
        if(sorting === 'asc')
            return va.sort();

        return va.reverse();
    };

重新分级脚本标签:

始终在您的脚本中放置一个结束 script 标记。当您使用时:&lt;script src="mysqcript.js"/&gt; 甚至没有加载脚本。

【讨论】:

  • 非常感谢!!!它完美地工作!那么你建议包含像&lt;script src="mysqcript.js"&gt;&lt;/script&gt;这样的javascript文件??
  • @RobertoRizz 很高兴我能帮上忙。
猜你喜欢
  • 2015-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多