收藏本站腾讯微博新浪微博

经典论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

蓝色理想 最新研发动态 网站开通淘帖功能 - 蓝色理想插件 论坛内容导读一页看论坛 - 给官方提建议

论坛活动及任务 地图和邮件任务 请多用悬赏提问 热夏来袭,选一款蓝色理想的个性T恤吧!

手机上论坛,使用APP获得更好体验 急需前端攻城狮,获得内部推荐机会 论坛开通淘帖功能,收藏终于可以分类了!

搜索
查看: 2387|回复: 20

被apply弄晕了,高手解释下

  [复制链接]
发表于 2012-3-31 17:09:19 | 显示全部楼层 |阅读模式
100体力
我只会用foo.apply(this, arguments)

但是对于下面,让我严重不解,直接晕倒

Math.min.apply({},h)

请高手解释!!!谢谢

最佳答案

查看完整内容

等同于 Math.min.apply(Math,h); 看了这里就明白:http://hi.baidu.com/liuzhiqun/blog/item/58c211a4fcf54afb9152ee0f.html
发表于 2012-3-31 17:09:20 | 显示全部楼层
本帖最后由 obananao 于 2012-3-31 17:53 编辑

等同于
Math.min.apply(Math,h);
看了这里就明白:http://hi.baidu.com/liuzhiqun/bl ... f54afb9152ee0f.html
回复

使用道具 举报

发表于 2012-3-31 17:14:19 | 显示全部楼层
可以把代码贴全点啊

回复

使用道具 举报

发表于 2012-3-31 17:15:21 | 显示全部楼层
apply 第一个参数是传递给函数的对象,min不需要,所以直接传个空对象,或者null也行
回复

使用道具 举报

发表于 2012-3-31 17:16:59 | 显示全部楼层

 提示:您可以先修改部分代码再运行

回复

使用道具 举报

发表于 2012-3-31 21:07:01 | 显示全部楼层
记得源文件里,var h是一个数组 var h=[];

Math.min.apply({},h) //他的作用就是得到这个h数组里最小的那个,如果h=[40,30,50],他就返回30.

里面"{}"这个东西,可以随便搞,换成null也能跑

回复

使用道具 举报

发表于 2012-3-31 21:14:12 | 显示全部楼层
Math.min是系统自带的函数,用来得到数组里最小的值~其他解释看6楼
回复

使用道具 举报

 楼主| 发表于 2012-3-31 22:08:12 | 显示全部楼层
hotcrab2008 发表于 2012-3-31 21:07
记得源文件里,var h是一个数组 var h=[];

Math.min.apply({},h) //他的作用就是得到这个h数组里最小的那 ...

换成null也能跑,我试过,换成math照样能跑。

如果函数是同过function.call或者是function.apply来调用的,this会被用作call/apply的第一个参数来传入。如果调用的函数的第一个参数为空或者是undefined,this将会指向全局对象(在浏览器中就是window对象)。
如果函数是通过function.bind来创建的,this将会作为bind第一个参数在函数被创建的时候出入其中、
如果函数被当做一个方法或者对象来调用,this指向那个对象。
其他情况,函数作为一个函数来调用并没有附加上任何其他对象,这时候this指向全局的对象。

我纠结的是,我不知道 原理 ,不理解,以后没办法自己用
回复

使用道具 举报

 楼主| 发表于 2012-3-31 22:11:00 | 显示全部楼层
obananao 发表于 2012-3-31 17:49
等同于
Math.min.apply(Math,h);
看了这里就明白:http://hi.baidu.com/liuzhiqun/blog/item/58c211a4fc ...


还是不太懂原理是什么,?而且下面代码报错!!

 提示:您可以先修改部分代码再运行

回复

使用道具 举报

发表于 2012-3-31 22:37:17 | 显示全部楼层
你想知道什么原理呢!!微机原理??

函数对象的apply方法用来调用对象的方法
第一个参数传入一个对象实例
第二个参数以数组形式传递方法的参数

有的方法是无关对象的,这时第一个参数可以随便传个值
……
你运行下四楼的代码看看吧!
无所谓原理不原理的,apply方法就是这么定义的
这就是一个特殊的调用类方法的方法
比如类本身没有需要的方法,但是别的类有
正常调用是 obj.method(arg1,arg2,...)
调用别的类的方法就这样 obj2.method.apply(obj,[arg1,arg2,...])

是想知道实现原理??去读源码吧!!

 提示:您可以先修改部分代码再运行

回复

使用道具 举报

发表于 2012-3-31 23:17:40 | 显示全部楼层

是不是楼主,搞不清楚this指向哪?

本帖最后由 hotcrab2008 于 2012-3-31 23:20 编辑

 提示:您可以先修改部分代码再运行








补充内容 (2012-3-31 23:26):
Math.min.apply({},h) 里面的“{}”,就相当于匿名填塞物,懒的给他取名字了
回复

使用道具 举报

发表于 2012-4-1 09:35:40 | 显示全部楼层
指针对象继承
回复

使用道具 举报

 楼主| 发表于 2012-4-1 10:17:09 | 显示全部楼层
hotcrab2008 发表于 2012-3-31 23:17
[html]


我弄的清楚this的指向,也知道call, apply作用就是借用别人的方法来调用,就像调用自己的一样.你的例子中前面的几个是指向window.
还是非常感谢您贴的代码。辛苦了,感谢感谢,请喝茶!
回复

使用道具 举报

 楼主| 发表于 2012-4-1 11:32:43 | 显示全部楼层
hotcrab2008 发表于 2012-3-31 21:07
记得源文件里,var h是一个数组 var h=[];

Math.min.apply({},h) //他的作用就是得到这个h数组里最小的那 ...

灰常感谢,终于懂了。谢谢回复!请喝茶哈。
回复

使用道具 举报

 楼主| 发表于 2012-4-1 11:33:53 | 显示全部楼层
zhanyuzai 发表于 2012-3-31 22:37
你想知道什么原理呢!!微机原理??

函数对象的apply方法用来调用对象的方法

为了加了alert就不报错了?
回复

使用道具 举报

发表于 2012-4-1 11:36:09 | 显示全部楼层
kxm1984 发表于 2012-4-1 11:32
灰常感谢,终于懂了。谢谢回复!请喝茶哈。

你就是单纯的不知道Math.min这个方法吗!!
回复

使用道具 举报

发表于 2012-4-1 11:52:22 | 显示全部楼层
kxm1984 发表于 2012-3-31 22:11
还是不太懂原理是什么,?而且下面代码报错!!

[html]Array.prototype.max = function() {

报错原因,没有添加;
  1. <script>
  2. Array.prototype.max = function() {
  3.     return Math.max.apply({},this)

  4. };
  5. Array.prototype.min = function() {
  6.     return Math.min.apply({},this)

  7. };
  8. [1, 2, 3].max();//
  9. [1, 2, 3].min();//
  10. </script>
复制代码
回复

使用道具 举报

 楼主| 发表于 2012-4-1 12:48:37 | 显示全部楼层
hellocookies 发表于 2012-4-1 11:52
报错原因,没有添加;

抱歉,我误会了,自己看错了,不是<script>标签的问题,没问题的,谢谢!
回复

使用道具 举报

 楼主| 发表于 2012-4-1 12:49:59 | 显示全部楼层
zhanyuzai 发表于 2012-4-1 11:36
你就是单纯的不知道Math.min这个方法吗!!


你误会了。
我不懂的是:
原来还可以这样写
以前没见过,现在见识了,理解了,并学习了
  1. Array.prototype.min = function() {
  2.     return Math.min.apply({},this)

  3. }
复制代码
回复

使用道具 举报

发表于 2012-4-1 13:44:54 | 显示全部楼层
kxm1984 发表于 2012-4-1 12:48
抱歉,我误会了,自己看错了,不是标签的问题,没问题的,谢谢!

我是说你没有添加;分号

哪里说是<script>标签的问题
回复

使用道具 举报

发表于 2012-4-1 15:12:12 | 显示全部楼层
兼容不好,怎么叫经典呢。...
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|小黑屋|Archiver|手机版|blueidea.com ( 湘ICP备12001430号 )  

GMT+8, 2020-8-11 12:21 , Processed in 0.109098 second(s), 7 queries , Gzip On, Memcache On.

Powered by Discuz! X3.2 Licensed

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表