摘要:新手經常犯的一個錯誤是將一個方法從對象中拿出來,然后再調用,希望方法中的是原來的對象。如果不做特殊處理的話,一般會丟失原來的對象。
call、apply、bind是JavaScript中Function函數自帶的方法,主要用于改變this的指向 區別: call()
1.語法:
fun.call(this, arg1,arg2)
2.this取值的幾點說明:
(1)處于非嚴格模式下,指定為null和undefined的this值會自動指向全局對象(瀏覽器中就是window對象)
嚴格模式下:
(2) 如果call方法的參數是一個原始值,那么這個原始值會自動轉成對應的包裝對象,然后傳入call方法
(3)傳遞一個對象,則this指向這個對象
apply()apply方法的作用與call方法類似,也是改變this指向,然后再調用該函數。
唯一的區別就是,它接收一個數組作為函數執行時的參數。
1.語法:
fun.apply(this,[arg1,arg2...])
2.幾個小應用:
(1)結合Math.max()找出數組最大項
(2)結合slice()將偽數組轉化為數組
啥叫偽數組:
i.有 0,1,2,3,4,5...n,length 這些 key 的對象;
ii.原型鏈中沒有 Array.prototype(如arguments對象,公有屬性是Object.prototype)
目前已知的偽數組:
i.arguments對象;
ii.由document.querySelectAll()返回的對象
運用:
bind()1.語法:
fun.bind(thisArg[, arg1[, arg2[, ...]]])
2.MDN文檔關于bind()的用法描述
bind() 最簡單的用法是創建一個函數,使這個函數不論怎么調用都有同樣的 this 值。JavaScript新手經常犯的一個錯誤是將一個方法從對象中拿出來,然后再調用,希望方法中的 this 是原來的對象。(比如在回調中傳入這個方法。)如果不做特殊處理的話,一般會丟失原來的對象。從原來的函數和原來的對象創建一個綁定函數,則能很漂亮地解決這個問題
var a = 18; var x = { a: 81, getA: function() { return this.a } }; x.getA(); // 81 var b = x.getA; b(); // 18(在這種情況下,this指向全局作用域) // 用bind()創建一個新函數,使this指向x對象 var bGetA = b.bind(x); bGetA(); // 返回 81
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/107221.html
摘要:理解文章中已經比較全面的分析了在中的指向問題,用一句話來總結就是的指向一定是在執行時決定的,指向被調用函數的對象。與和直接執行原函數不同的是,返回的是一個新函數。這個新函數包裹了原函數,并且綁定了的指向為傳入的。 理解 JavaScript this 文章中已經比較全面的分析了 this 在 JavaScript 中的指向問題,用一句話來總結就是:this 的指向一定是在執行時決定的,...
摘要:首先,我們判斷是否存在方法,然后,若不存在,向對象的原型中添加自定義的方法。指向調用它的對象。總之三個的使用區別都是用來改變函數的對象的指向的第一個參數都是要指向的對象都可以利用后續參數傳參是返回對應函數,便于稍后調用,是立即調用 apply和call都是為了改變某個函數運行時的上下文而存在的(就是為了改變函數內部this的指向),Function對象的方法,每個函數都能調用; 使用a...
摘要:和類似,都是調用函數,并指定函數的值和參數,區別在于傳入參數是通過參數列表的形式,傳入參數是通過數組的形式方法與前兩個不同,它創建一個新的函數,在調用新函數時,會調用原函數,并指定原函數的值和參數。執行的時候并沒有調用函數。 簡介 JavaScript 中有三個方法Function.prototype.call()、Function.prototype.apply()和Function...
摘要:綁定函數被調用時,也接受預設的參數提供給原函數。一個綁定函數也能使用操作符創建對象這種行為就像把原函數當成構造器。 一直很難理解js中的call apply bind,在w3schools,mdn閱讀了,也看了很多相關的文章,今天我來寫下我理解的call apply bind 首先創建一個函數 function man(){} man.prototype = { name: ...
閱讀 2592·2023-04-25 22:09
閱讀 2837·2021-10-14 09:47
閱讀 1889·2021-10-11 11:10
閱讀 2677·2021-10-09 09:44
閱讀 3372·2021-09-22 14:57
閱讀 2493·2019-08-30 15:56
閱讀 1615·2019-08-30 15:55
閱讀 775·2019-08-30 14:13