为了账号安全,请及时绑定邮箱和手机立即绑定

关于js的面试题

关于js的面试题

青黄不一 2017-07-05 14:36:13
var a=1; var fun=function(){ var a=2; this.a=3; this.fn=function(){ return a; } } fun.a=4; fun_proto_.fn=5; alert(fun.fn)这个输入出来的结果是什么呢?说明下原因。求大牛帮忙~
查看完整描述

1 回答

已采纳
?
李晓健

TA贡献1036条经验 获得超461个赞


就是5呀;

首先,你定义了一个方法 fun ,但是你在后面没有new 操作符,也没有调用方法  所以方法里面是什么,都无所谓了,那么这个fun 就和一个普通对象差不多,然后你又让他的a属性等于4,这后面个也没有用到,也无所谓了,然后你又设置了他的__proto__.fn,这个__proto__就是原型, 也就是说你在fun的原型上加了一个 fn的属性,值为5。最后你取了fun的fn的值,也就是fun.fn   。这个先在会fun自身上面去找fn,发现fun上并没有fn,就去fun的原型链上去找就是去fun的__proto__上面去找,就找到你设置的5,所以就弹出来了一个5。这样希望你能看懂。

你的代码应该有两处错误,

// fun 后面应该有一个点,你没写    proto两边都是两条_,你都写的是一条
fun.__proto__.fn = 5



如果你的问题已解决,请记得采纳答案!





查看完整回答
2 反对 回复 2017-07-05
  • 青黄不一
    青黄不一
    老师,您好!如果有new,那么fun函数里面才会有意义,才能用上,是这样子吗?(大部分意思是能看懂得)
  • 李晓健
    李晓健
    不一定非要new 直接调用的话,方法里面的代码也会执行的呀。
  • 1 回答
  • 0 关注
  • 1113 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信