我是新来的原型,我只是做了一个简单的例子,不会工作。从下面的代码显而易见我想要的 - 一个计数器。但由于某种原因输出始终为5
,我猜bind
正在制作this
对象的深层副本,然后绑定到该函数。有一个明显的解决方案,我公开所有内容,但我想知道是否有更优雅的解决方案。 (或者你可以纠正我的错误,并告诉我没有深层复制,但有一些其他错误)。 documentation没有帮助我。Javascrtip绑定,它是否创建`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>
你在哪里使用'.bind'? – pimvdb
分配给'ClassA.prototype'的匿名函数从不使用(或获取)其“self”参数。此外,您应该将立即调用的函数包装在括号中以提高可读性。 –
对不起,在发布我没有清理之前尝试的东西时,我犯了一些愚蠢的错误。谢谢你告诉我。 –