假設我有以下代碼:當在JavaScript中的對象中分配curried函數時,這和自己有什麼區別嗎?
<html>
<head>
<title>test</title>
</head>
<body>
<header><h1>test</h1></header>
<script type="text/javascript">
function myFunction2Wrapper(arg1) {
return function() {
console.log("state of arg1 in a curried function is: " + arg1);
}
}
function MyObject() {
var internalState1 = "a";
function myFunction1() {
console.log("state of internalState1: " + internalState1);
}
myFunction1();
this.myFunction2 = myFunction2Wrapper(internalState1);
//self.myFunction2 = myFunction2Wrapper(internalState1);
myFunction2();
//console.log(myFunction2);
console.log("done!");
};
MyObject();
</script>
</body>
</html>
請特別注意線路:
this.myFunction2 = myFunction2Wrapper(internalState1);
//self.myFunction2 = myFunction2Wrapper(internalState1);
我的問題是:是否有分配一個對象裏面咖喱函數時this
和self
任何區別JavaScript的?
使用本地ES5'.bind()'方法來設置上下文。請參閱http://kishorelive.com/2012/02/06/currying-in-javascript-using-bind/ – Robusto
如果您取消註釋'self.myFunction2 = ...'行,您會因爲'self'沒有定義。但'self'與'this'在這裏不相關,因爲'MyObject()'是唯一指向'this'的函數。是否有任何咖啡正在發生並不相關。另外,因爲你在沒有'new'的情況下調用了'MyObject()','this'的值就是'window',這意味着'this.myFunction2 = ...'創建了一個新的全局函數 - 這就是爲什麼你可以調用'myFunction2()'你的方式。 – nnnnnn
'self'實際上是定義的,指的是'window.self'。 – RainingChain