function.prototype.call()
在browser上運行的javascript,其global scope是window,但當在不同地方呼叫global的function時,我也希望這個funciton能依據呼叫的所在而使用當時的scope,這時我們就能使用call。
以下是一段簡單的程式碼:
scope="window"; foo = function(){console.log(this.scope);}; cat={ scope:"cat", foo:function(){console.log(this.scope);}, bar:function(cb){cb();} }; foo(); //"window" cat.foo(); //"cat" cat.bar(foo); //"window" foo.call(cat); //"cat"
從這段簡短的程式碼中就可以看出call可以改變韓式執行的scope,這個功能常用在事件處理上。
apply()的功能跟call很像,差別在於參數的傳遞方式不同:
function.prototype.apply()
apply()的功能跟call很像,差別在於參數的傳遞方式不同:
call(valueForThis, arg1, arg2, ...) //一個一個指定參數 apply(valueForThis, arrayOfArgs) //將參數放到陣列後傳入真的說起來,apply()還比call()早出現(前者v1.2,後者v1.5)
沒有留言:
張貼留言