js 中对象与匿名函数的问题

问题如图,为啥point对象调用apply()会报错,而p调用就不报错呢... 问题如图,为啥point对象调用apply()会报错,而p调用就不报错呢 展开
 我来答
longjingx
2018-03-23 · 超过11用户采纳过TA的回答
知道答主
回答量:17
采纳率:91%
帮助的人:14.8万
展开全部
js中apply()方法是函数的一个属性point.getX().apply() 这么用的时候,getX() 这是一个执行的函数,返回值是一个数字
p.apply(),p是一个函数

正确写法应该是point.getX.apply()
追问

大神,那么问题又来了,为什么point.getX.apply()是undefined

追答

因为你的p里面并没有x这个属性,point.getX.apply(p) 返回的是p的x属性,所以会打印出来undefined

只要在图上5行和6行之间加一个 p.x=22,这样就会打印出来结果了

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

刚才在外面,用手机打字不太方便,我把刚才的回答完善一下:

js中 方法的属性 apply() 实际作用是 修改 被调用者所属的对象

也就是说 p.apply( point ) 这个段代码的作用是 将 p (被调用者) 归属到point对象下,也就等同于 point 对象里面有一个 p 方法,这样 p方法中 this.x,实际上就是在调用 point.x

同理

point.getX.apply( p ) 就是 在 p中调用 point.getX 方法,也就是说 point.getX 方法中使用的 this.x 实际上是 p.x,因为你代码中定义的 p 并没有 x 属性,所以在打印的时候就是undefined

总结起来,_function_.apply( obj ),传入的obj是谁,_function_ 所属的对象就是谁

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式