如何使用Object.defineProperty方法自定义Array在JavaScript中的行为方式?

时间:2018-04-07 02:44:19

标签: javascript

我想通过使用Object.defineProperty方法更改Array的行为方式。

我知道这不是一件好事。这仅用于实验目的。

例如,如果我有一个数组stop,当我有console.log([1,2,3])时,我希望输出结果为[1, 2, 3]

同样,我知道这是疯狂的事情!但是,我想了解它如何更深入地理解JavaScript。

[2, 4, 6]

谢谢! - 我的最终代码

谢谢! @Ry,@ vol7ron

'use strict';

Object.defineProperty(
  Array.prototype,
  Symbol.iterator, //should this be `this` instead?
  {
    value: function*() {
      yield 'what should I do here ???';
    }
  }
)

console.log([1, 3]) // expect this result to be [2, 6]

1 个答案:

答案 0 :(得分:1)

[...[1, 3]]不使用迭代器迭代来显示您的数组。但是,已经在该示例中成功覆盖了它,正如您可以看到使用迭代器的东西,例如数组文字传播'use strict'; let originalIterator = Array.prototype[Symbol.iterator]; Array.prototype[Symbol.iterator] = function* () { for (let x of originalIterator.call(this)) { yield 2 * x; } }; console.log([...[1, 3]]);

简化为:

{{1}}