輕鬆搞定 JS 的this call和apply

2022-07-17 10:33:12 字數 3031 閱讀 9230

年前最後一篇文章,提前祝大家春節快樂。對了,還有369就要2023年了,提前祝大家2023年春節快樂。

.. .vr       

qbmbbbmbmy

8bbbbbobmbmv

imbmm5voy:bmbbv

.r, obm; .: rbbbbby

vul 7bb .;7. lbmmbbm.

.@wwz. :uvir .i:.ilmomobm..

vv::r; iy. ...rv,@arqiao.

li. i: v:.::::7vobbmbl..

,i7: vsui, :m7.:.,:u08op. .

.n2k5u1ju7,.. bmgiil7 ,i,i.

:rljfyjvjly7r::. ;v vr... re8q;.:,,

751jslxpfu5uu@guohezou.,1vjy2e8@yizero.

bb:fmu rkm8eq0pfjf15fz0xu15f25uuluu25gi.

ivsvvxl :v58zogzxf2uukfsfku1u125uujuuz,

:@kevensun. ,iy20goxsuxksus2f5xxkux5sev.

.:i0bmbmbboobmui;, ,;8pkfp5nkpxkfqpeqqkzu.

.rqmqbbmommbmbbbm . @kexianli.s11kfsu5q5

.7bboi1l1mm8bbbombb.., 8kqs52xkku1uqkk1kuej

.;mbz;iimbmbmmobbbu , 1oks1f1x5kpp112f51ku

.rpy ombmbbbmbb2 ,. rme5sssfk1xpqfnksupz,.

;;jubml::r:.:.,, szpx0sxsp5kxgnp15ubr.

l, :@huhao. :mnzqnxqsqxk2e0psxpe .

vilbx.,,v8bj. i:r7:, 2zkqq0xxsnn0noxxsxou

:r2. rmbgbmgi .7y, 1i::i vo0pmnnsxxeqp@secbone.

.i1r. .jky, ve. iy.... 20fq0q5x5f1s2f22uuv1m;

在面試的時候,經常會出現這樣的面試題目:

var obj = 

}var bar = obj.foo

obj.foo() // 列印出的 this 是 obj

bar() // 列印出的 this 是 window

初學者其實對於this肯定是一頭霧水,甚至有一些有工作經驗的夥伴,對this的理解也依舊很模糊。

函式的呼叫分為一下三種方式:

func(p1, p2) 

obj.method(p1, p2)

其實所有的呼叫方式都是func.call(context, p1, p2)方式的語法糖。

前面兩種方式轉換成call方式:

func(p1, p2) 

=》func.call(undefined, p1, p2)

obj.method(p1, p2)

=》obj.method.call(obj, p1, p2)

上面的context就是this

function func()

func()

=》func.call(undefined) // 可以簡寫為 func.call()

理論上來說,列印的this應該就是undefined,但是瀏覽器裡有一條規則:

如果你傳的contextnull或者undefined,那麼window物件就是預設的context(嚴格模式下預設contextundefined

因此上面的列印結果是** window**。

如果你要改變this,那麼傳入新的context就好了:

func.call(obj) // 那麼裡面的 this 就是 obj 物件了
var obj = 

}obj.foo()

=》obj.foo.call(obj)

this 就是 obj
var obj = 

}var bar = obj.foo

obj.foo() // 轉換為 obj.foo.call(obj),this 就是 obj

bar()

// 轉換為 bar.call()

// 由於沒有傳 context

// 所以 this 就是 undefined

// 最後瀏覽器給你乙個預設的 this —— window 物件

作用一樣,傳參方式所有區別而已。

func.call(func, p1, p2, p3) // this

輕鬆搞定素數

素數,我們在數學上早就學過了吧,還記得定義是什麼嗎,其定義是 乙個大於1的自然數,除了1和它本身外,不能整除以其他自然數 質數 整除,素數又叫質數。我們在進行素數判定的時候就要從它的定義入手。我們先來看一道例題。素數判定 description 對於表示式n 2 n 41,當n在 x,y 範圍內取整...

輕鬆搞定github

網上關於github的教程很多,但是很多部落格都總結的不全,導致我們需要查閱大量的部落格才能掌握github的基礎操作。我也是尋找了很久,才發現幾個比較好的github使用的總結教程。這幾個總結教程非常全,基本能滿足我們平時的需求。1.註冊流程 github安裝教程 2.使用方法 github詳細使...

輕鬆搞定Spark安裝

1.spark的官網位址是 目前最新版本為2.6.3.spark與openfire類似,為各個主流平台提供安裝包。2.安裝spark,一路 next 下去。安裝完畢之後,如下圖所示 3.可以使用openfire伺服器提供的管理員賬號 admin admin 登陸spark客戶端。也可以註冊新的賬號,...