方法的精神

时间:2017-11-17 13:18:52

标签: javascript computer-science

在对方法函数的arity进行分类时,是否需要考虑使用this?例如:

// Unary
function double(num) {
    return num * 2;
}

// Binary
function add(num1, num2) {
    return num1 + num2;
}

class Calc {
    value;

    // Unary or binary?
    add(num1) {
        return this.value + num1;
    }

    // Nullary or unary?
    double() {
        return this.value * 2;
    }
}

我一直认为this是一个隐含的参数。

(我假设有一个与语言无关的答案,但它是我最感兴趣的JavaScript答案)

2 个答案:

答案 0 :(得分:2)

我看到它的方式,this不是参数,而是执行方法的上下文,因此add方法是一元的,double方法是无效的。

答案 1 :(得分:2)

C ++和其他OOP语言允许我们编写如下内容:

C a,b,c;
c = a + b;

C是一个类,abc是类C的实例)

C可以将+运算符定义为方法或朋友函数。作为一种方法,它接受一个参数(它是第二个操作数,第一个操作数是this)。作为友元函数,它需要两个参数(两个操作数)。

添加是二元运算符(我们从数学中知道这一点,上面的用法不能否认这一点)。在C++中它可以作为只接受一个显式参数的方法实现的事实只是一个实现细节。它的实际值由它需要使用的值的数量来设定。

底线是:this必须计为参数。如果函数不使用它,则它不应该是实例方法,而是类方法或独立函数。