无奈的瓶子 2017-04-05 05:27 采纳率: 100%
浏览 4917
已采纳

单例模式中 fn.apply(this,arguments) 问题

最近再学习 javascript 设计模式
第一个 单例模式中 有个例子 如下:

 <body>
<button id="loginBtn">登录</button>
<script type="text/javascript">
    var createLoginLayer = function(){
        var div = document.createElement("div");
        div.innerHTML = '我是登录浮窗';
        div.style.display = 'none';
        document.body.appendChild(div);
        return div;
    };

    var getSingle = function(fn){
        var result;
        return function(){
            return result || (result = fn.apply(this,arguments));
        }
    };

    var createSingleLoginLayer = getSingle(createLoginLayer);
    document.getElementById('loginBtn').onclick = function(){
        var loginLayer = createSingleLoginLayer();
        loginLayer.style.display = 'block';
    };
</script>
</body>

实现是 需要登录框时 点击登录时 只出现一个登录框 其中

  var getSingle = function(fn){
        var result;
        return function(){
            return result || (result = fn.apply(this,arguments));
        }
    };
这段代码中fn.apply(this,arguments) 不知道怎么理解 用断点查看 其中的this指向window 但是我用fn();替换也是可以的 不知道fn.apply(this,arguments)这段代码怎么理解 我知道apply() 这个第一个参数是绑定上下文用的, 是否当createSingleLoginLayer()被调用时this是否指向createSingleLoginLayer本身  请解答下
  • 写回答

3条回答 默认 最新

  • lihongbiao0610 2017-04-05 06:16
    关注

    this 不是指向createSingleLoginLayer的,指向window .其实这里的this没有用。
    之所以用fn.apply(this,arguments)而不用fn(),是因为要传参数,而且参数的个数不固定。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
  • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)