我是新來的原型,我只是做了一個簡單的例子,不會工作。從下面的代碼顯而易見我想要的 - 一個計數器。但由於某種原因輸出始終爲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」參數。此外,您應該將立即調用的函數包裝在括號中以提高可讀性。 –
對不起,在發佈我沒有清理之前嘗試的東西時,我犯了一些愚蠢的錯誤。謝謝你告訴我。 –