【问题标题】:Javascript Binary Search prototype ArrayJavascript 二分搜索原型数组
【发布时间】:2017-03-02 00:48:34
【问题描述】:

首先你要创建三个函数,作为 Array 类的原型返回以下内容:

toTwenty()` returns `[1, 2, 3 . . . 20]

下面是测试用例

describe('Binary Search to traverse an ordered list, effectively', function() {
  describe('Populate the arrays with valid content', function() {

    it('should create an array from 1 to 20, with intervals of 1', function() {
      expect(oneToTwenty[0]).toBe(1);
      expect(oneToTwenty[19]).toBe(20);
      expect(oneToTwenty.length).toBe(20);
      for(var i = 0; i < oneToTwenty.length - 1;i++) {
        expect(oneToTwenty[i + 1] - oneToTwenty[i]).toBe(1);
     }
    });

这是下面的代码是我的代码,但我不断得到

var oneToTwenty = [].toTwenty();
"TypeError: Object  has no method 'toTwenty'"

这是我的代码

function oneToTwenty(){

}

oneToTwenty.prototype.toTwenty = function(){
    var start = 1;
    var end = 20;
    var oneToTwenty = [];

for(var i = start; i <= end; i += 1){
    oneToTwenty.push(i);
}
   return oneToTwenty;
}

【问题讨论】:

    标签: javascript class prototype


    【解决方案1】:

    这个var oneToTwenty = [].toTwenty(); 让我觉得您是在尝试更改 Array 原型,而不是创建新类型。您不能覆盖数组字面量的含义,但您可以向本机类型添加方法:

    Array.prototype.toTwenty = function(){
        var start = 1;
        var end = 20;
    
        for(var i = start; i <= end; i += 1){
            this.push(i);
        }
       return this;
    }
    
    var oneToTwenty = [].toTwenty();
    
    console.log(oneToTwenty); // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]

    不过,我认为这不是一个好主意。更改原生 JavaScript 类型可能会干扰其他库期望 JavaScript 的行为方式,如果这是一种流行的做法,库和代码将不断地覆盖自己。只需构建您自己的使用数组的列表类型并保留数组本身。仅仅因为你能做到并不意味着你应该这样做。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-05
      • 2017-04-16
      • 2018-06-24
      • 1970-01-01
      • 2021-03-25
      • 1970-01-01
      相关资源
      最近更新 更多