我想通过使用 Object.defineProperty 方法改变 Array 的行为方式。
我知道这不是一件好事。这仅用于实验目的。
例如,如果我有一个数组[1, 2, 3]
,当我使用console.log([1, 2, 3])时,我希望输出结果为[2, 4, 6]
。
再一次,我知道这是一件疯狂的事情!但是,我想了解它是如何工作的,以便更深入地理解 JavaScript。
'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]
谢谢! - 我的最终代码
谢谢!! @Ry,@vol7ron
'use strict';
(function() {
let originalIterator = Array.prototype[Symbol.iterator];
Object.defineProperty(
Array.prototype,
Symbol.iterator,
{
value: function* () {
for (let x of originalIterator.call(this)) {
yield 2 * x;
}
}
}
)
})();
console.log([...[1, 3]]);
最佳答案
console.log
不使用迭代器迭代来显示您的数组。不过,您已经在该示例中成功覆盖了它,正如您可以看到使用迭代器的东西,例如数组文字传播 [...[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]]);
关于javascript - 如何使用 Object.defineProperty 方法自定义 Array 在 JavaScript 中的行为方式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49703332/