function fn(){
console.log(1);
}
fn.toString = function(){
return 30;
}
console.log(fn);
不懂为什么打印结果是30..
function fn(){
console.log(1);
}
fn.toString = function(){
return 30;
}
console.log(fn);
不懂为什么打印结果是30..
对象(包括函数)默认自身是没有toString()方法的,会根据__proto__链一路找到Object,这方法是它的,现在你给fn指定了它自己的toString方法,并且指定了返回值为30,那打印结果当然是30了;
查询一个对象中的属性时,如果在对象内找不到,就会去原型找,如果找到,就直接返回,就这么简单.
有一个博主说过,有些时候是会自动调用valueOf和toString的。当你直接fn时输出的是函数体,其实相当于执行fn.valueOf(),在这里因为你改写了toString所以优先调用改写的那个,所以fn执行的也就是fn.toString()
10 回答11.3k 阅读
5 回答4.9k 阅读✓ 已解决
4 回答3.2k 阅读✓ 已解决
2 回答2.8k 阅读✓ 已解决
3 回答2.4k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
console.log输出函数时调用其toString方法。因为你复写了函数的toString并return 30所以才会输出30呀。不然应该是function function。应该是前者表示类型后者表示值。