SB前端求解答,我的call和apply。

2013-07-05 10:35:53 +08:00
 coolicer
这2个东西用起来不是很熟练,有没有什么好方法。我知道这是改变context的函数,但是用起来总是很不灵活。

其实我心中还是有概念的,不就是改变执行环境的this....
3799 次点击
所在节点    JavaScript
5 条回复
wencheng
2013-07-05 11:55:57 +08:00
这个没什么不方便吧,觉得你可能对context的理解不够深吧,慢慢来不用一下要把call和apply用的那么精。
qiqiboy
2013-07-05 12:24:40 +08:00
现在不理解就避免使用丫,看的代码多了总有一天会顿悟的
kfll
2013-07-05 14:08:40 +08:00
if (condition)
nodeExample.removeClass('eg')
else
nodeExample.addClass('eg')

==>

[Node.addClass, Node.removeClass][!!condition * 1].call(nodeExample, 'eg')

----------------

当然,第一种要容易明白的多...

----------------

Object.prototype.toString.call(arrExample)
Array.prototype.forEach.call('hello', function(char, i) { console.log(char + '_') })

----------------
tulike1
2013-07-05 14:38:35 +08:00
经典用法,可以帮助理解

1、求数组的最大值
Math.max.apply(Math, [1, 2, 3, 4, 5]) //=> 5

2、判断数据类型
{}.toString.call([1, 2, 3]) //=> [object Array]
coolicer
2013-07-05 15:32:43 +08:00
@kfll [Node.addClass, Node.removeClass][!!condition * 1].call(nodeExample, 'eg') 妙啊。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/74828

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX