今天面试遇到了个抽象的题目,看起来简单但是总感觉有点问题
javascript吧
全部回复
仅看楼主
level 1
乱步丶丨 楼主
面的阿里外包[柯基暗中观察],console.log(myCalculator(121).add(1).minus(2).multi(3).div(4));//控制台打印90
如何实现myCaculator函数,目前我只能在调用div方法之后返回一个对象,再对象点value才能打印90,没法直接打印90
2024年03月05日 12点03分 1
level 1
toString() {return this.value}
2024年03月05日 17点03分 2
大佬,这个toString绑定在谁的原型上可以啊,我自己试了如果直接myCalculator.toString=()=>{return this.value}的话,必须得调用toString才会最终打印结果90,否则还是打印对象
2024年03月06日 01点03分
直接改 Number.prototype[汗]
2024年03月06日 02点03分
level 3
function myCalculator(a){return function add(b){a+=b;return function minus(c){a-=c;return function multi(d){a*=d; return function div(e){return a/=e}}}} }
2024年03月06日 01点03分 3
这种情况其实我最开始也是这样写的,但是那边面试官说不能保证add,minus这些操作的顺序就像题里一样,考察的是原型链
2024年03月06日 02点03分
level 3
贴吧老把我代码内容是别成连接,只好截图了,你自己敲一下吧
2024年03月06日 06点03分 4
姓名红领巾,爱好助人为乐[吐舌]
2024年03月06日 06点03分
nb,等我回家再试试[真棒]
2024年03月06日 06点03分
level 13
两种思考方向:
1.出题者可能希望你能够更改对象在控制台中的显示行为,但不巧的是,(据我所知)主流 JS 引擎皆没有提供能够实现这种能力的方法,在 ECMA 标准中也不存在这种特性,这属于无米难炊。像 DOM 元素等在控制台里独特的显示方法是引擎内置对象的特权。如果出题者本意如此,那么他想找的应该是神仙。
2.出题者希望你用非常规的方式实现一些非常规的功能,但这类问题从来都不是什么好问题,无一例外都是反面教材。非常规意味着有可能限定于某一门语言或某一种环境,亦或者会对同一环境下的其他代码产生影响,而且一般都没有什么实际应用的意义。如果出题者是此种想法,那么有理由怀疑这个人不怎么实在。
话虽如此,但对方才是在上面的那个,个人怎么想对现实无益。以如果真的要做,由于第一种方向目前不可取,只能往第二种方向思考。
如果真的要在控制台直接显示数字,那么只有这个东西本身就是 JS 内置数据类型这一种可能。JS 允许修改其内置的数据类型的封装类的原型,所以直接在 Number 的原型上添加需要的方法,最后直接将 Number 作为 myCaculator 即可。
2024年03月06日 15点03分 5
nb,不过我试了下四楼的解决方法既能不改变number的原型,又能实现直接打印数字
2024年03月07日 03点03分
你猜它修没修改原型[滑稽]
2024年03月07日 15点03分
@BSPR0002 我去,还真是,数字value的原型就是Number[柯基暗中观察]
2024年03月08日 02点03分
@乱步丶丨 value.__proto__指向的就是Number.prototype所以本质上就是修改原型啦,这位老哥写法更简洁一些
2024年03月09日 04点03分
1