js 中call和apply的應用

2022-05-04 17:15:07 字數 1583 閱讀 7798

function.prototype.call();

語法:fun1.call(fun2,arg1,arg2,arg3,...);

fun1.call(fun2,[arg1,arg2,arg3,...]); 

說明:改變fun1的this指向,即將fun2代替fun1裡的this,也可以理解為fun2繼承了fun1裡所定義的屬性和方法;

引數:arg1,arg2,...為方法的引數;

function a(arg1,arg2)    

function b(arg1,arg2)

a(3,1); //4

b(3,1); //2

a.call(b,3,1) //4

// 說明: a.call(b,3,1) 理解為a物件的方法應用到b物件上;注意這裡沒有涉及this的指向

function aobj()

}function bobj()

}

var a=new aobj();

var b=new bobj();

a.showa(); // 我是a;

b.showb(); // 我是b;

a.showa.call(b); //我是b;

/*** 說明:a.showa.call(b); 執行的是aobj裡的showa方法,但是將a.showa方法的this指向了b;

* 所以a.showa中的this.name 就是b.name 為"我是b";

*/

function aobj(name)

}function bobj(name)

var obj=new bobj("i'm lucy");

obj.showa(); //i'm lucy

/**

* 說明:bobj裡並沒有定義任何的屬性和方法;但是aobj.call(this,name) 中將aobj的this指向了bobj,

* 所以bobj裡也擁有了name屬性和showa方法;

*/

3.2.1 math函式

math.max函式使用方法:math.max(arg1,arg2,arg3,...);    max.min同理

var max1=math.max (1,3,5,7,9);

console.log(max1) // 9;

var arr=[1,3,5,7,9];

// math.max不支援 math.max(arr);

console.log(max2) // 9;

/*** 這裡傳入不存在的null物件呼叫math.max方法,但是並沒有改變this的指向

*/

3.2.2 合併陣列

var arr1=[1,2,3];

var arr2=[4,5,6];

var arr3=[7,8,9];

//為陣列新增元素的push方法

arr1.push(arr2);

console.log(arr1); // [1,2,3,[4,5,6]] 並不能實現同級合併;

js中call和apply用法

1 方法定義 call方法 語法 call thisobj arg1 arg2 argn 定義 呼叫乙個物件的乙個方法,以另乙個物件替換當前物件。說明 call 方法可以用來代替另乙個物件呼叫乙個方法。call 方法可將乙個函式的物件上下文從初始的上下文改變為由 thisobj 指定的新物件。如果沒...

JS中apply和call的區別

聯絡 obj 這個物件將代替 function類裡this物件,也即 function類 函式 裡的this不在是指 function 本身,而是obj args 這個是陣列型別的引數,它將作為引數傳給function args arguments 結果是還是執行 function 類方法 函式 的...

js中的apply和call函式

主要我是要解決一下幾個問題 obj 這個物件將代替function類裡this物件 args 這個是陣列,它將作為引數傳給function args arguments function.call obj,param1 param2 paramn obj 這個物件將代替function類裡this物...