将javascript函数转换为方法
我有一个javascript过程函数,用于处理属于a类的对象:将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
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
”的全部代码