在討論這個問題之前,我們先看一下在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...