標籤:style blog color io os 使用 ar strong sp
在學習新的東西時候,碰到以前看過而又不理解,或則記憶不深的地方不妨回頭看看書裡知識點,有助於加深理解。正所謂--溫故而知新。
廢話不多說,直接上代碼:
第一節:一個簡單的例子
function add(a,b){ console.log(a+b); } function sub(a,b){ console.log(a-b); } add.call(sub,3,2); //5
總結:以上代碼 定義兩個方法,而最後一句話,不妨理解為 sub對象 調用了 add對象 的方法,並把參數也帶入方法裡。
第二節:深入理解 call 和 apply
call 和 apply的定義說明:call和apply 是函數的非繼承方法,在某個特定作用範圍內調用某個函數,設定函數體內this對象的值,
function NJie(){ this.name = "Njie", this.sayName = function(){ console.log(this.name); } } function KK(){ this.name ="KK"; } var n = new NJie(); var k = new KK(); n.sayName(); //NJie n.sayName.call(k); //KK
總結:比如說:k 對象沒有 sayName 的函數,而 n 有這個函數,那 k 就通過call 來借 n的 sayName使用,當然也要把在 k 中的值帶入到方法裡。
第三節:call 和 apply 的 區別
說明:call 和 apply 的區別,在於兩個傳入的參數的方式不一樣
// 父類 function Person(name,age){ this.name = name; this.age = age; } //子類 學生 function Student(name,age,grade){ Person.apply(this,arguments); //子類繼承了父類 // Person.call(this,name,age); //當然,也可以使用 call的方法 this.grade = grade; } //建立一個學生的執行個體 var s1 = new Student("倪傑","23","北京大學成人班,一年級"); console.log("您好,",s1.name,"您今年",s1.age,"歲,就讀於",s1.grade,",實在太棒了");
總結:
以上的例子有兩個要點:
1,是可以使用 call的方法來做 js 的繼承處理;
2,call 和 apply 的區別主要是在於後面的傳入參數方式不同,call傳參數要把參數一一列出來,而apply則可以使用 arguments 這個屬性直接帶過去.
關於 js 中的 call 和 apply使用理解