鍍金池/ 問答/Java  HTML/ with()和call(),apply()存在的意義是否一樣?(注意是存在的意義

with()和call(),apply()存在的意義是否一樣?(注意是存在的意義)

在JavaScript中,with語句的作用是將代碼的作用域設(shè)置到一個(gè)特定的對(duì)象中。那么它存在的意義是否和call 和 apply 一樣? 如果一樣,在什么情況下分別使用哪一種呢?如果存在的意義不一樣,又不一樣在哪里呢?

回答
編輯回答
夢(mèng)囈

當(dāng)然不一樣。

callapply 是從函數(shù)出發(fā)的操作, with 是從上下文對(duì)象出發(fā)的操作。

with 這種上下文出發(fā)的操作,在功能上來說是完全多余的,因?yàn)楹?jiǎn)單的 obj.xxx = func 就可以達(dá)到同樣的效果。

function f(){
  console.log(this.a);
}
var obj = {a: 123};
with(obj){ f() }
f.apply(obj);
f.call(obj);



var obj = {a: 1111, f: f};
with(obj){ f() }
2017年2月10日 11:29
編輯回答
奧特蛋

我覺得從意義上來講是一樣的。

with改變的上下文是定義的時(shí)候創(chuàng)建好的是作用域鏈

call,apply改變的上下文是this指向是執(zhí)行的時(shí)候獲取是原型鏈

然后說說分別使用哪一種。當(dāng)然是在你必須用的時(shí)候用了呀,不過我覺得不會(huì)存在這樣一個(gè)時(shí)候的。
比如with改變的上下文,你創(chuàng)建一個(gè)function就可以改變自己的了。問題不大吧。或者說你重新命名幾個(gè)變量下面再去用,問題不大吧。無非就是用一個(gè)對(duì)象來替換了當(dāng)前的上下文環(huán)境。

再說call,其實(shí)你也可以用一個(gè)function來把數(shù)據(jù)解析。也可以直接把這個(gè)方法放在新的對(duì)象上去跑。無所謂的,當(dāng)然把this賦值給一個(gè)變量,然后用這個(gè)變量去訪問好像問題也不大啊。

不要為了用什么而去用,而是我需要什么。

2018年7月4日 06:46
編輯回答
青檸

有一句話,“如果你不知道是否需要 Redux,那就是不需要它”,套用到call apply也是一樣

2018年5月16日 02:46