深入理解JS的apply call

2021-09-24 08:29:51 字數 1479 閱讀 5201

主要解決以下幾個問題:

function.call(obj,[param1[,param2[,…[,paramn]]]])obj:這個物件將代替function類裡this物件

params:這個是乙個引數列表

/*定義乙個人類*/

function

person(name,age)

/*定義乙個學生類*/

functionstudent(name,age,grade)

//建立乙個學生類

var student=new student("qian",21,"一年級");

//測試

alert("name:"+student.name+"\n"+"age:"+student.age+"\n"+"grade:"+student.grade);

//大家可以看到測試結果name:qian age:21 grade:一年級

//學生類裡面我沒有給name和age屬性賦值啊,

複製**

this:在建立物件在這個時候代表的是student

arguments:是乙個陣列,也就是[「qian」,」21」,」一年級」];

也就是通俗一點講就是:用student去執行person這個類裡面的內容,在person這個類裡面存在this.name等之類的語句,這樣就將屬性建立到了student物件裡面

person.call(this,name,age);

這樣就ok了

在呼叫person的時候,他需要的不是乙個陣列,但是為什麼他給我乙個陣列我仍然可以將陣列解析為乙個乙個的引數,

因為math.max引數裡面不支援math.max([param1,param2])也就是陣列

這塊在呼叫的時候第乙個引數給了乙個null,這個是因為沒有物件去呼叫這個方法,我只需要用這個方法幫我運算,得到返回的結果就行,.所以直接傳遞了乙個null過去

vararr1=new array("1","2","3");   

vararr2=new array("4","5","6");

複製**

還有比如第四部分得內容,巧妙的解決了實實在在存在的問題,這個肯定不是乙個初學者能想到的解決方案(這個也不是我自己想的),沒有對程式設計有一定認識的不會想到這個的,還是一句話,多積累,多學習,提公升自己的能力和對程式設計思想的理解能力才是最關鍵!

js深入理解 一

1if a b 兩者等價 a b alert hello word 2.給eval取別名var a 111 var b eval var c b a alert c 輸出 111 3.刪除元素 不能刪除 var語句宣告的變數 var o delete o.x alert o.x 輸出 undefin...

js深入理解(二)

1.函式閉包var scope global scope function checkscope return f checkscope 輸出local scope var scope global scope function checkscope return f checkscope 輸出lo...

js深入理解(三)

1.物件的三個屬性 原型屬性 object.getprototypeof a 獲取a的原型 a.constructor.prootype 獲取a的原型 推薦 o.isprototypeof a 判讀o是否是a的原型 類屬性 function classof o classof o 輸出object ...