私はプロトタイプに不慣れで、うまくいかない簡単な例を作成しました。以下のコードから、私が欲しいのは明らかです-カウンター。しかし、何らかの理由で、出力は常にです。は、オブジェクトのディープコピーを作成している5
と思います。これは、関数にバインドされます。私がすべてを公開する明らかな解決策がありますが、もっとエレガントな解決策があるかどうか知りたいです。(または、私の修正を行って、深いコピーはないが、他のバグがあると教えてください)。ドキュメントは私を助けませんでした。bind
this
コード:
<!DOCTYPE html>
<html>
<body>
<input type="button" value="click" onclick="javascript: doTest();" />
<div id="canvas"></div>
<script>
var ClassA = function (position, element) { // constructor
this.field1 = position;
this.target = element;
};
ClassA.prototype = function () {
// private functions
var _aPrivateMethod = function(){
console.log(this);
this.field1 += 1;
return this.field1;
};
var _aPublicMethod = function(){
this.target.innerHTML = _aPrivateMethod.bind(this)();
};
return { // interface
constructor: ClassA,
aPublicMethod : _aPublicMethod
};
}();
function doTest() {
var obj = new ClassA(4, document.getElementById('canvas'));
obj.aPublicMethod();
}
</script>
</body>
</html>