将javascript函数转换为方法

将javascript函数转换为方法,javascript,methods,Javascript,Methods,我有一个javascript过程函数,用于处理属于a类的对象: function max(a, b) { if (a > b) return a; else return b; } a = max(a, b); 我想把它转换成一种方法;一个尝试是: A.prototype.max = function(b) { if (this > b) { // do nothing } else { this = b; } } a.max(b

我有一个javascript过程函数,用于处理属于a类的对象:

function max(a, b) {
  if (a > b)
    return a;
  else
    return b;
}
a = max(a, b);
我想把它转换成一种方法;一个尝试是:

A.prototype.max = function(b) {
  if (this > b) {
    // do nothing
  } else {
    this = b;
  }
}
a.max(b);
   this.max = (b) => {
     if (this.value > b){
       // do nothing
      } else {
        this.value = b;
      }
   }
但是很明显,它不起作用,因为这个不能被分配


我该怎么做?

我认为在这种情况下正确的做法是将
a
的值指定为类的属性。您甚至可以在创建时传递它:

class A {
  constructor(val = null) {
    this.value = val;
   }

   this.max = function(b) {
     if (this.value > b){
       // do nothing
      } else {
        this.value = b;
      }
   }
}
如果不需要在创建时传入null,则将其替换为所需的任何默认值,或者只需将构造函数中的
val
替换为默认值,并将其作为一个参数取出:

class A {
  constructor() {
    this.value = aDefaultValueForAllInstances;
   }
...
或者,使用箭头函数时,方法为:

A.prototype.max = function(b) {
  if (this > b) {
    // do nothing
  } else {
    this = b;
  }
}
a.max(b);
   this.max = (b) => {
     if (this.value > b){
       // do nothing
      } else {
        this.value = b;
      }
   }
您还可以简化if语句:

if (b < this.value){
  this.value = b;
}
if(b
一个很好的迹象表明,如果一个
if
语句中没有做某些事情,就可以简化它


如果你的代码真的这么简单,那么现实地说,你最好还是让它保持程序化。

简单的答案是你不能。你的目标是在调用
a.max(b)后让它这样做吗
,如果
b
较大,则在下一行打印
a
将产生存储在
b
中的值?函数没有任何程序性。它没有副作用,而是返回一个像正确函数一样的结果。请发布“类
a
”的全部代码