我是原型新手,我只是做了一个不起作用的简单示例。从下面的代码可以看出我想要什么 - 一个计数器。但由于某种原因,输出始终是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>