使用新创建的Array.prototype方法操作`this`对象

huangapple go评论69阅读模式
英文:

Manipulate the `this` object using a newly created Array.prototype method

问题

我正在尝试扩展JavaScript中的Array对象,就像这样。我试图使用原型来操纵数组中的值(存在于this对象中),就像在该函数中一样。

function clear() {
    this = [];
}
Object.defineProperty(Array.prototype, 'clear', { value: clear, enumerable: true, });

它给我一个错误
Uncaught SyntaxError: Invalid left-hand side in assignment

我知道this是不可变的。有什么解决方法吗?我不想创建一个模拟Array构造函数的新对象。

英文:

I am trying to extend the Array object in Javascript exactly like this. I am trying to manipulate the values of the array (present in the this object) using the prototype like in the function.

function clear() {
    this = [];
}
Object.defineProperty(Array.prototype, 'clear', { value: clear, enumerable: true, });

It is giving me a error
Uncaught SyntaxError: Invalid left-hand side in assignment

I am aware that the this is immutable. What is the workaround? I am not looking to create a new Object that emulates the Array constructor.

答案1

得分: 1

这是一种选项:

this.splice(0, this.length)

我猜你也可以直接使用 this.length=0,但这感觉有点巧妙。

英文:

One option would be

this.splice(0, this.length)

I guess you can also do this.length=0 directly, but it feels kinda hacky.

huangapple
  • 本文由 发表于 2023年2月7日 01:30:28
  • 转载请务必保留本文链接:https://go.coder-hub.com/75364656.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定