對call方法的深度分析

2021-08-18 13:14:09 字數 937 閱讀 6321

call([thisobject[,arg1 [,arg2 [,…,argn]]]])方法呼叫乙個物件的乙個方法,以另乙個物件替換當前物件。那麼當thisobj在不同情況下是什麼樣的呢?

函式

functiona()

如果是函式的話,則this指向b函式。那麼a中的kid屬性是否在b函式中呢?由上圖可見,kid屬性存在於b的constructor中,並且可以通過b.kid訪問到,當然name除外.

2.null或者undefined

functiona()

a.call(null);

a.call(undefined);

如果是null或者undefined,則this指向window,屬性kid也存在於window中。

3.字串、數值、布林

functiona()

a.call('a');

a.call(3);

a.call(true);

如果是字串,數值,布林,則this指向其包裝型別如string,number,boolean。無法通過屬性來訪問kid。

4.陣列

functiona()

var pram = ['aaa'];

a.call(pram);

如果是陣列,則將a中this指向屬性轉換為鍵值對放入陣列中,如上面的pram會變成[「aaa」, kid: 「lily」, age: 14]。

5.物件

如果為物件,則this指向物件,較為常見,就不介紹了

Call分析(三)Call中執行的任務

我們前面說了call中有兩個跟執行緒有關的成員module process thread 和pacer thread 我們看在call建構函式中,跟這兩個成員相關的 call call 結合前面的分析,我們推出,在module process thread 的執行緒中,會執行的任務為 callsta...

Python中的call方法

在 python 中提供了 call 方法,允許建立可呼叫的物件 例項 如果類中實現了 call 方法,則可以像使用函式一樣使用類。usr bin env python coding utf 8 class run object def init self pass def call self,da...

類的特殊方法 call

1.call 當執行物件名 括號時,會自動執行類中的 call 方法,怎麼用?class a def init self,name self.name name def call self,args,kwargs print 123 obj a wangjianwei obj 當執行 object ...