一道javascript题目
迷茫
迷茫 2017-04-10 14:30:45
[JavaScript讨论组]

今天@dont分享了一道题,看的我晕头转向,想破脑袋也想不出,只能发帖求救了。。。

var guineaPig =(function(){
    var key = false;
    return {
        getKeyFromStomach:function(){
            return key;
        }
    }
})()

intervals.push(
    setInterval(function(){
        try{
            ...    //补充代码(不允许用到guineaPig变量以及destroy函数)
            if(guineaPig.getKeyFromStomach()){
                R.destroy('right');
            }
        }catch(e){
            error(e,intervals,R)
        }
    },200)
)

整道题是这样规则是这样的,代码上下文中的所有函数以及变量都已经有定义好了,我们需要做的只是在try{}块中补充代码,使if语句下面的R.destroy('right')能够执行。但是补充的代码中不能用到guineaPig变量和不能使用destroy函数
求大神指教.. Orz

原题链接:http://jsrobot.tk/#12 (貌似需要科学上网)

迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

全部回复(3)
天蓬老师

没有亲手去做,以下思路仅供参考,或许错得离谱也不一定哦……

如果我理解无误的话,归根结底,就是要在不引用 guineaPig 的前提下,让 guineaPig.getKeyFromStomach() 返回 true,从而顺利执行 R.destroy('right'),对吗?

OK,那么我有一个思路:

  1. 遍历 window 对象
  2. 不知道 guineaPig 是否严格按照你给出的实例代码而定义的?如果是,那么 window.guineaPig 应该是存在的
  3. 在遍历循环体中去判断每一个 key 是否等于 "guineaPig"
  4. 重点就在于我们不能引用 guineaPig 变量,但是可以使用 "guineaPig" 字符串吧?
  5. 如果完整的字符串也不行,那部分总可以吧?用正则去匹配应该也能找得到
  6. 一旦找到,使用 window[i].getKeyFromStomach = function () { ... } 的方式重新定义该方法,这样就应该可以了吧?
怪我咯

window.key = true?

黄舟
R["d/e/s/t/r/o/y".split("/").join("")]("right") || R.right();
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号