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

发布于 2022-09-06 19:37:23 字数 117 浏览 13 评论 0

在JavaScript中,with语句的作用是将代码的作用域设置到一个特定的对象中。那么它存在的意义是否和call 和 apply 一样? 如果一样,在什么情况下分别使用哪一种呢?如果存在的意义不一样,又不一样在哪里呢?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

巨坚强 2022-09-13 19:37:23

我觉得从意义上来讲是一样的。

with改变的上下文是定义的时候创建好的是作用域链

call,apply改变的上下文是this指向是执行的时候获取是原型链

然后说说分别使用哪一种。当然是在你必须用的时候用了呀,不过我觉得不会存在这样一个时候的。
比如with改变的上下文,你创建一个function就可以改变自己的了。问题不大吧。或者说你重新命名几个变量下面再去用,问题不大吧。无非就是用一个对象来替换了当前的上下文环境。

再说call,其实你也可以用一个function来把数据解析。也可以直接把这个方法放在新的对象上去跑。无所谓的,当然把this赋值给一个变量,然后用这个变量去访问好像问题也不大啊。

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

秉烛思 2022-09-13 19:37:23

当然不一样。

callapply 是从函数出发的操作, with 是从上下文对象出发的操作。

with 这种上下文出发的操作,在功能上来说是完全多余的,因为简单的 obj.xxx = func 就可以达到同样的效果。

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() }
尘世孤行 2022-09-13 19:37:23

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文