關於call的使用和原理分析

2021-10-01 10:26:41 字數 1575 閱讀 6890

call()方法使用乙個指定的this值和單獨給出的乙個或多個引數來呼叫乙個函式。

var obj =

}window.a =

100var b = obj.b;b(

)// 100

b.call

(obj)

// 1

function.call(thisarg, arg1, arg2, …)

thisarg

可選的。在 function 函式執行時使用的 this 值。請注意,this可能不是該方法看到的實際值:如果這個函式處於非嚴格模式下,則指定為 null 或 undefined 時會自動替換為指向全域性物件,原始值會被包裝。

var obj =

}window.a =

100var b = obj.b;

b.call

(null

)// 100

arg1, arg2, …

指定的引數列表。

function.prototype.

mycall

=function

mycall

(...args)

else

return

this

}

var obj = object(args[0])
使用 object 建構函式建立乙個物件包裝器。當以非建構函式形式被呼叫時,object 等同於 new object()。

obj 表示函式執行時使用的 this 值(傳入的第乙個引數),如果基本資料型別會先轉換成引用資料型別。因為 this 值必須是物件的形式。

obj 表示函式執行時使用的 this 值(傳入的第乙個引數)。fn 是定義在執行時使用的 this 值上的乙個屬性。this 表示需要改變 this 指向的函式

關於__proto__這個連線存在於例項與建構函式的原型物件之間,那麼有人會問為什麼要設定在__proto__上,而不設定在例項的prototype上,因為有可能是普通物件或者是函式,普通物件是沒有prototype屬性的。

通過執行時使用的 this 值來呼叫 fn 函式。那麼 fn 函式裡面的 this 就自然是執行時使用的 this 值(傳入的第乙個引數)。

ret和call的原理

1.ret 指令用棧中的資料,修改ip的內容,從而實現近轉移 cpu執行ret指令時,進行下面兩步操作 1 ip ss 16 sp 使用棧頂元素修改ip實現跳轉 2 sp sp 2 2.retf 用棧中的資料,修改cs和ip的內容,從而實現遠轉移 cpu執行retf指令時,進行下面四步操作 1 ip...

call 和 apply的使用

call 改變this指向 function people function man name,age var people new people var man new man 小明 25 people.show 今年 0 歲 people.show.call man 小明 今年 25 歲 繼承 ...

call的實現原理

下面我們來看乙個例子 let body document.body let obj function func x,y body.nclick func和body.click func 的區別bind原理和思想 執行bind bind中的this是要操作的函式 返回乙個匿名函式給事件繫結或者其它的內...