原型返回[function]而不是Array

时间:2016-10-22 10:23:35

标签: javascript prototype

我正在为Number创建一个原型函数。一旦我调用它,我就会返回[Function]或我的函数体。我想知道我做错了什么。感谢帮助。

Number.prototype.splitDigits = function(){
        var str = this.toString;
        var arrayDigits = [];
        var length = str.length;
        for (var i = 0; i<length; i++){
            arrayDigits.push(Number(str.charAt(i)));
        }
        return arrayDigits;
    };

我正在调用这样的函数:

var num = 2000;
var array = num.splitDigits;

我得到的回报是:

[Function]

a0 function (){
    var str = this.toString;
    var arrayDigits = [];
    var length = str.length;
    for (var i = 0; i<length; i++){
        arrayDigits.push(Number(str.charAt(i)));
    }
    return arrayDigits;
}

4 个答案:

答案 0 :(得分:1)

你不打电话给这个功能。只是,你在为阵列提供功能。

将以下代码托盘调用功能。

var num = 2000;
var array = num.splitDigits();

答案 1 :(得分:1)

  

您需要调用函数

没有大括号,您只需访问为Number定义的属性。这是一个功能。

答案 2 :(得分:1)

代码中有两个错误。

  1. this.toString - &gt; this.toString()
  2. splitDigits - &gt; splitDigits()
  3. 修复后

    Number.prototype.splitDigits = function(){
        var str = this.toString();
        var arrayDigits = [];
        var length = str.length;
        for (var i = 0; i<length; i++){
            arrayDigits.push(Number(str.charAt(i)));
        }
        return arrayDigits;
    };
    

    生成

    > var num = 2000;
    > var array = num.splitDigits();
    > array
    [2, 0, 0, 0]
    

答案 3 :(得分:1)

您没有调用此功能。如果您不想明确地调用它,可以使用getter:

&#13;
&#13;
Object.defineProperty(Number.prototype, 'splitDigits', {
  configurable: true,
  get: function() {
    var str = this.toString();
    var arrayDigits = [];
    var length = str.length;
    for (var i = 0; i<length; i++){
      arrayDigits.push(Number(str.charAt(i)));
    }
    return arrayDigits;
  }
});
var num = 2000;
console.log(num.splitDigits);
&#13;
&#13;
&#13;

请注意,您的代码无法使用1e100

等数字