es5 bind和es3函式模擬的bind的區別

2021-09-02 12:33:51 字數 711 閱讀 8773

在討論這個問題之前,我們先看一下在es5出現內建的bind函式之前,是怎麼模擬bind的

function.prototype.bind = function (othis) 

var aargs = array.prototype.slice.call(arguments, 1),

ftobind = this,

fnop = function () {},

fbound = function () ;

fnop.prototype = this.prototype;

fbound.prototype = new fnop();

return fbound;

};

實際上乙個繫結函式沒有prototype屬性,prototype[[code]][[formalparameters]][[scope]]

如果返回繫結函式的prototype屬性,則會輸出目標函式的prototype

這麼做的好處是優化效能,繫結函式本身並不是乙個完整的函式,而是原函式的中間**。

繫結函式的[[call]][[construct]][[hasinstance]]都被過載,實際指向原函式

ES5 bind用法及與以前的apply和call

當我們呼叫乙個函式的時候,函式中的this一般是指向呼叫者的。但是我們其實可以在呼叫函式的時候,傳入乙個物件,讓函式中的this指向我們傳入的物件,而不是呼叫者本身。例 var name tom var obj function fun function fun1 age fun1 11 fun1....

es3中使用es6 7的字串擴充套件

最近在看阮一峰的 es6標準入門 在字串擴充套件一節中有提到幾個新的擴充套件,覺得挺有意思,想在es3裡面使用,於是就有下面的相容性寫法。將乙個字串重複n次 string.prototype.repeat string.prototype.repeat function number number ...

單例模式之es3與es6雙版本(設計模式)

保證乙個類僅有以乙個例項,僅能被例項化 建立一次,並提供全域性的訪問點。單例模式是一種重要的設計模式,有些物件我們只需要建立乙個,比如瀏覽器的window物件,模態對話方塊。實現這種設計模式其實很簡單,最重要的是在建立例項的時候,用乙個標記變數判斷例項是否已經建立。function singleto...