call,apply學習筆記

2021-09-24 23:52:11 字數 2596 閱讀 1185

一、三個函式存在意義:改變函式執行時的上下文改變函式執行時的this指向。

let obj = ;

function child(name)

child.prototype =

}var child = new child('thomas');

child.showname(); // thomas

child.showname.call(obj);

let bind = child.showname.bind(obj); // 返回乙個函式

bind(); // tony

拿別人的showname方法,並動態改變其上下文幫自己輸出了資訊,說到底就是實現了復用。

二、區別

1.引數的區別:

(1)call和aplly的第乙個引數都是要改變上下文的物件;

(2)而call從第二個引數開始以引數列表的形式展現;

例子:

// 求陣列中的最值

let arr1 = [1, 2, 19, 6];

console.log(math.max.call(null, 1,2,19,6)); // 19

console.log(math.max.call(null, arr1)); // nan,這裡call傳陣列就不行

function fn() 

fn.call(); // 普通模式下this是window,在嚴格模式下this是undefined

fn.call(null); // 普通模式下this是window,在嚴格模式下this是null

fn.call(undefined); // 普通模式下this是window,在嚴格模式下this是undefined

三、實際使用

0.將偽陣列轉化為陣列

條件:(1)含有length屬性的物件,dom節點, 函式的引數arguments

1.陣列拼接,新增

let arr1 = [1,2,3];

let arr2 = [4,5,6];

//陣列的concat方法:返回乙個新的陣列

let arr3 = arr1.concat(arr2);

console.log(arr3); // [1, 2, 3, 4, 5, 6]

console.log(arr1); // [1, 2, 3] 不變

console.log(arr2); // [4, 5, 6] 不變

console.log(arr1); // [1, 2, 3, 4, 5, 6]

console.log(arr2); // 不變

2.判斷變數型別

let arr1 = [1,2,3];

let str1 = 'string';

let obj1 = ;

//function isarray(obj)

console.log(fn1(arr1)); // true

// 判斷型別的方式,這個最常用語判斷array和object,null(因為typeof null等於object)

console.log(object.prototype.tostring.call(arr1)); // [object array]

console.log(object.prototype.tostring.call(str1)); // [object string]

console.log(object.prototype.tostring.call(obj1)); // [object object]

console.log(object.prototype.tostring.call(null)); // [object null]

function animal(name)      

}

function cat(name)

// animal.call(this) 的意思就是使用this物件代替animal物件,那麼

// cat中不就有animal的所有屬性和方法了嗎,cat物件就能夠直接呼叫animal的方法以及屬性了

var cat = new cat("tony");

cat.showname(); //tony。

4.多繼承

function class1(a,b) ,$`);

}} function class2(a,b) ,$`);

}} function class3(a,b,c)

let arr10 = [2,2];

let demo = new class3();

demo.showclass1.call(this,1); // class1: 1,undefined

demo.showclass1.call(this,1,2); // class1: 1,2

JS學習筆記之call apply的用法

var func function a,b,c 複製 var func function a,b,c func.call null,1,2,3 複製 var func function a,b,c 複製 如果是嚴格模式下,函式體內的this還是null var func function a,b,c...

原型,原型鏈,call apply

原型prototype 祖先 1.定義 原型是function物件的乙個屬性,它定義了建構函式製造出的物件的公共祖先。通過該建構函式產生的物件,可以繼承該原型的屬性和方法。原型也是物件。2.利用原型特點和概念,可以提取共有屬性。3.物件如何檢視原型 隱式屬性 proto 指向原型 4.物件如何檢視物...

call apply 原型 原型鏈

call需要把實參按照形參的個數傳遞進去 改變this指向 傳參不同 原型 1.函式物件有 proto 和prototype屬性 2.非函式物件只有 proto 屬性 3.prototype中有 proto 屬性,是object構造出來的 4.函式物件 proto 指向它的建立者及function建...