一、三個函式存在意義:改變函式執行時的上下文,改變函式執行時的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建...