javascript関数とオブジェクトのバインディングについて


javascriptは私が見た中で一番珍しいもので、一番難しい言語です.オブジェクトに基づいていますが、オブジェクトの関数はオブジェクトと結合されていません.次の例を見てください.
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>  js          </title>
</head>
<body>

<script>

    var theAccumulator = {
        total: 0,
        clear: function () {
        },
        clear: function () {
            this.total = 0;
        },
        add: function (x) {
            this.total += x;
        },
        getResult: function () {
            return this.total;
        }
    };
    theAccumulator.clear();
    theAccumulator.add(1);
    theAccumulator.add(2);

    function printResult(func) {
        console.log(func());
    }

    printResult(theAccumulator.getResult);//  undefined 

</script>
</body>
</html>
 javaプログラマーはきっと困惑しています.全体の人がよくないと思います.なぜなら、javascriptは呼び出し時のスコープに基づいてパラメータを探すからです.つまり、私たちがよく言っているスコープチェーンです.getResult関数をパラメータとしてprint Resoult関数に導入すると、gets Result関数にはコンテキストがありません.
このように変更すると:
   printResult(function(){
        return theAccumulator.getResult() ;//  3
    });
出力は正常です.このときget Result関数はコンテキストをバインドしているからです.