Javascript應該是現在最流行的跨平臺語言之一,一直在玩前端的一些有意思的東西,發現竟然沒有掌握好這門語言。有點舍本逐末,于是想趁著現在這有空的時候好好補充一點遺漏的東西。
this的隱性綁定
一開始這是我很迷惑的東西,剛開始看到的時候,不理解。而后,在相似的情況下,又能用類似的方法解決同樣的問題。便試著理清這其中的知識,方便于查找。
這是一個Javascript語言上設計的錯誤,但是似乎這個錯誤是不可避免的,函數是對象,數組是對象等等。引用《Javascript: The Good Parts》中的例子
此時sum的結果是7。
以此模式調用函數時,this被綁定到全局變量。
也就是在現在的環境下,我們可以這樣調用this
};
console.log(user.hello());
如果我們在這個方法中定義一個變量并給它賦值this,那么內部函數就可以通過那個變量訪問到this。
var that = this
于是當情況稍微復雜一點的時候我們就需要用到:
1.this變量的作用域總是由其最近的封閉函數所確定。
2.使用一個局部變量(如me,self,that)讓this綁定對于內部是可用的。
一個簡單的例子:
var MM = function(){
z = new M();
this.name = "MM";
z.printName = function(){
console.log(this.name);
};
return z.printName();
};
var mm = new MM;
這樣就能返回一個MM了。除此之外,在ES5中可以用回調函數的bind方法。
其他
又一個hello,world
在一次偶然的機會中遇到print('Hello')('World'),然后輸出了'Hello, World'。
所謂的高階函數,看上去似乎很有用,有興趣可以看看下一篇。
新聞熱點
疑難解答