JavaScript 為什麼要把 this 暴露出來

時間 2021-06-02 17:08:58

1樓:孫竟

這是動態語言帶來的靈活性啊,Python 也是這樣。

在不需要靈活性的地方,你完全可以不用 this。可是你用到了,就說明你確實需要。

舉例來說,你怎麼在 C++ 裡傳遞乙個物件的方法?想想都覺得很麻煩。

而 JS 可以把乙個函式和物件通過 Function.prototype.bind() 繫結在一起(即方法),然後直接傳遞。

很顯然,函式和物件的分離,使得重用函式時粒度變細了,不需要使用繼承或組合。你可以寫一堆通用的函式,然後按需要繫結到各種物件上。而用 C++,你可能得寫 n * m 個方法,或者用更複雜的模板來處理(看上去還不優雅)。

而如果你不需要這種靈活性,也可以直接用 obj.method() 來呼叫方法,沒人逼你寫成 func.call(obj)。我不覺得這有什麼麻煩的。

真要說麻煩的話,倒是有另乙個常用場景:閉包。如果你用 jQuery 的話,你可能經常會在函式裡巢狀乙個匿名的 callback 函式。

其中內層函式需要使用或更改外層函式的 this 的狀態,這時就要區分兩個上下文的 this 了。

當然,這個場景與你的問題無關,因為在無閉包的語言裡不會有這種問題。

為什麼JavaScript裡面typeof null 的值是 object ?

自由的囚徒 這是JS語言本身的乙個bug。不同的物件在底層都表示為二進位制,在js中二進位制前三位都為0的話會被判斷為object型別,null的二進位制表示全是0,自然前三位也是0,所以執行typeof時返回 object 阿布丁 說句人話,不說書裡的鬼話 因為 所有引用型別的名字是乙個指標,指的...

你為什麼選擇 JavaScript ?

牆外一枝花 多年前,面試的時候,一邊是三年.net 給你6k,一邊是3個月js也是6k,所以沒那麼多為什麼,最初的選擇源於人性的最基本訴求,溫飽。 題葉 最開始上網,沒人教程式設計,我唯一能折騰的東西只有瀏覽器,高中用 GreenBrowser 替換了 IE 自以為很開心,後來知道 Opera,最後...

我為什麼喜歡 javascript

和你有一樣的感受 從小爸媽就愛吵架,愛打架。我做過做多的事就是一邊哭一邊在他們中間拉架,求他們別再打架了。小學有乙個最好的玩伴,我最喜歡和她一起玩,我覺得自己潛意識裡是因為她的爸爸媽媽感情特別好,每次去她家玩,都能看的出來她爸媽感情很好。初中的時候去外地上學,最擔心的就是爸媽在家吵架互相掐架。最近和...