Javascript 自定义 Array.prototype.method 日志 'not defined'

Javascript Custom Array.prototype.method logs 'not defined'

所以,我以前从未这样做过,试图向 Array.prototype 添加一个方法。有关用法,请参阅下面的 console.log 语句。它一直告诉我方法未定义。我不知道我做错了什么。求助!

到目前为止,我最好的结论/猜测是“this”指的是全局对象,这不知何故搞砸了。但如何解决,无从知晓。 :(

const solution = input =>{
  
  Object.defineProperty(
      Array.prototype, 'polyReverse', {
        value: () => this ? (polyReverse(this.substr(1)) + this[0]) : (this),
        configurable: true, writable: true  
      }
  );

  console.log("string".split("").polyReverse().join(""));

};
/*****
 * 
 * ReferenceError: polyReverse is not defined
 *   at Array.value (main.js on line 4:20)
 * 
 * 
 *///////

注意:我也试过这个值的值..

value: () => this ? (this.substr(1).polyReverse() + this[0]) : (this),

还有这个...

value: () => this ? (this.polyReverse(this.substr(1)) + this[0]) : (this),

运气不好

我尝试了以下方法并解决了 not defined

的问题

Array.prototype.polyReverse = function(value) {
  return this ? (this.substr(1).polyReverse() + this[0]) : (this)
};

console.log("string".split("").polyReverse().join(""));

除此之外,您的逻辑似乎有问题,并且会引发错误。我不确定你想用 polyReverse 实现什么,所以你是解决这个逻辑的最佳人选。

由于您专门询问了 not defined 问题,以上代码片段应该可以解决您的问题并帮助您进一步解决逻辑问题

所以根据这里有用的人的建议,我能够解决大家所说的问题,不要使用箭头函数。是的!另外,注意到扩展本机方法是多么糟糕!我现在会做一个子class来做这个。

感谢大家的帮助。

工作代码...

const solution = input =>{
  
  Object.defineProperty(
      Array.prototype, 'polyReverse', {
        value: function() {
          console.log(this); 
          return (this.length > 0 ? 
           (this.join("").substr(1).split("").polyReverse() + this[0]) : 
           (this)
          )},
        configurable: true, 
        writable: true  
      }
  );

  console.log("string".split("").polyReverse());

};