我第一次看到这种奇怪的用法是在babel的源码中, 其实它的原理就是使得在prop这个方法里无法获取this, 从而无法对类中的其他变量或方法做操作。
obj.prop()
这是一个方法调用, prop方法里可以获取到this
var func = obj.prop;
func()
这是一个函数调用
(0, obj.prop)()
这是一个函数调用, 在方法调用前放一个逗号(,), 会使得js解引用, 从而从方法调用变成函数调用。
引用变量有三个操作:
GetValue(V): 如果V是一个值, 返回V, 如果是引用, 则返回V引用的值, 即, 返回最终的值。
PutValue(V, W): 引用变量V的值设为W。
GetThisValue(V): 只有在V是一个引用属性的时候调用, 返回引用变量。
而赋值和逗号都会使得引用变量解引用, 从而调用GetValue()获取到最终的值, 从而没有了this, 变成方法调用。