【问题标题】:Trying to recreate the array.length method尝试重新创建 array.length 方法
【发布时间】:2022-01-18 02:19:18
【问题描述】:

正如标题所说,我正在尝试重新创建 array.length 方法并将其作为方法存储在对象上。问题是我似乎无法弄清楚如何将长度属性设置为零......我收到这个错误提示

"应该有一个初始为 0 的 'length' 属性"

还有……

“错误:预期 [Function] 等于 0”。

我在下面包含了关于如何评估函数的测试用例。

describe('Arrays/Errays', () => {
  let array, contents;

  beforeEach(() => {
    array = new Erray();
    contents = array.contents;
  });

  it('should have a \'length\' property that is initially 0', () => {
      expect(array.length).to.not.be(undefined);
      expect(array.length).to.be(0);
    })
  });

这是我迄今为止编写的代码。

function Erray() {
    this.contents = [];
    length: 0;
  }

Erray.prototype.length = function() {
      let length = 0;
      for (let i = 0; i < this.contents.length; i++) {
        length++;
      }
      return length;
    }
  
var array = new Erray;

第二个错误让我相信一个函数正在返回到测试用例,这就是为什么它说“错误:预期 [Function] 等于 0”,括号中带有单词“Function”。

关于为什么我没有通过我的测试用例的任何线索或提示?感谢您的宝贵时间!

【问题讨论】:

    标签: javascript methods string-length


    【解决方案1】:

    您可以使用Object.defineProperty 为长度属性创建一个getter。

    function Erray() {
      this.contents = [];
    }
    Object.defineProperty(Erray.prototype, 'length', {
      get() {
        return this.contents.length;
      }
    });
    var array = new Erray;
    console.log(array.length);
    array.contents.push(1);
    console.log(array.length);

    【讨论】:

    • 哇,谢谢!现在我只需要了解为什么要使用 Object.defineProperty 和吸气剂...但是谢谢!我相信我会弄清楚的!
    • @DaShaman 乐于助人。
    猜你喜欢
    • 2022-12-08
    • 1970-01-01
    • 2020-06-01
    • 1970-01-01
    • 2015-12-10
    • 1970-01-01
    • 1970-01-01
    • 2018-09-24
    • 2021-05-19
    相关资源
    最近更新 更多