2017-06-04 3 views
-2

私はFabric.js javascriptライブラリの_drawControl機能を理解しようとしていますが、関数のようには見えず条件付きではないので、2行分を見つけられませんでした。||の1行Javascriptの文字ですか?

1行目:

​​

2行目:

ctx[methodName + 'Rect'](left, top, size, size); 

のフル機能:

_drawControl: function(control, ctx, methodName, left, top) { 
    if (!this.isControlVisible(control)) { 
    return; 
    } 
    var size = this.cornerSize, stroke = !this.transparentCorners && this.cornerStrokeColor; 
    switch (this.cornerStyle) { 
    case 'circle': 
     ctx.beginPath(); 
     ctx.arc(left + size/2, top + size/2, size/2, 0, 2 * Math.PI, false); 
     ctx[methodName](); 
     if (stroke) { 
     ctx.stroke(); 
     } 
     break; 
    default: 
     isVML() || this.transparentCorners || ctx.clearRect(left, top, size, size); 
     ctx[methodName + 'Rect'](left, top, size, size); 
     if (stroke) { 
     ctx.strokeRect(left, top, size, size); 
     } 
    } 
} 
+0

'ISCO場合は、最初の2例は、明白ですntrolVisible'は真を返し、そうでなければリターンします。 '.cornerStyle'が' circle'でなければデフォルトになります。その後、「魔法」が始まります...しかし、それは本当に簡単です。 '||'は論理和であるので、 'isVML'関数を呼び出します。もし真を返すならば、他のものをチェックする必要はありません。偽を返したら' .transparentCorners'をチェックし、偽'ctx.clearRect'。 – adeneo

答えて

1

非常に簡単です。第一短絡及び第真引数取る:

let foo = false || "foo" || "never reached"; 
 
console.log(foo); // foo 
 

 
let bar = "bar" || "never reached" || false; 
 
console.log(bar); // bar

第二つ(4つの引数を使用して)ブラケット表記を介してオブジェクトのメソッドを呼び出す - 動的メソッドを呼び出すために使われていた:

function Foo() { 
 
    
 
} 
 

 
Foo.prototype.bar = function() { 
 
    console.log('bar'); 
 
    } 
 

 

 
let foo = new Foo(); 
 
let variable = 'bar'; 
 
foo[variable](); 
 

 
// same as 
 

 
foo.bar();

1

この場合、オペレータはshort-circuit evaluationに使用されます。それはisVML()の実行から始まり、偽の値を返した場合、次のステートメント(this.transparentCorners)に進み、同じことを確認します。真理値に達すると、その値が返されます。この場合、戻り値は使用されません。

関連する問題