javascript関数とオブジェクトのバインディングについて
1194 ワード
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関数はコンテキストをバインドしているからです.