猿问

关于js的面试题

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)

这个输入出来的结果是什么呢?说明下原因。求大牛帮忙~

青黄不一
浏览 1114回答 1
1回答

李晓健

就是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如果你的问题已解决,请记得采纳答案!
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答