请问老师可以解释一下吗

请问老师可以解释一下吗

<html>
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
    <script type="text/javascript">
    var Person = (function() {
        var instance=null;                                                 
        return function() {
            if(instance)  return instance;
            this.name = 'zhangsan';
            this.id = Math.random();
            instance=this;
        }
    })();
    var Person1 = new Person();
    // 这里new了一个新的对象。进行了实例化person 也就是实例person1,person1访问到自己的instance变量的值并且将自己赋值给instance,this是代表person1
    var Person2 = new Person();
    // 这里new了一个新的对象。进行了实例化person 也就是实例person2,person2访问到自己的instance变量的值并且将自己赋值给instance,this是代表person2
    console.log(Person1 == Person2);
    // 请问为什么他们会相等,他们具有各自的instance互相不干扰为什么会都指向了同一个地址?
    </script>
</body>
</html>

请问老师这段代码我实在是想不明白

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
好帮手慕夭夭 2018-09-11 11:31:28

同学参考如下图 :

http://img1.sycdn.imooc.com//climg/5b9736340001182012930433.jpg

这个叫做单例模式哦 , 第一次实例化时 ,this指向Person1 , 并且把this赋值给instance , 当第二次实例化时 , 代码直接返回instance ( 因为代码执行if(instance)  return instance;) , 所以第二次实例时时直接把instance 的值返回了而已 , 两次指向的都是Person1 , 所以会相等

这个知识比较难理解 ,同学不要陷进去 , 不理解可以先记下 , 以后慢慢就能理解了 , 加油 !

祝学习愉快 ,望采纳

  • 提问者 hy_wang #1
    就是说instance在闭包结构里边,因为有作用域链,在内层函数中找不到instance这个变量,所以沿着作用域链向外查找,找到了在外部函数中的instance所以都能访问到instance。是因为这个原因吗老师
    2018-09-11 12:29:10
  • 好帮手慕夭夭 回复 提问者 hy_wang #2
    同学理解的是对的 , 很棒哦 ! 用闭包保存了instance , 记录是不是被实例化了,实例化了就直接返回
    2018-09-11 13:47:41
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
组件化思想开发电商网页 18版
  • 参与学习           人
  • 提交作业       467    份
  • 解答问题       4826    个

本路径带你通过系统学习HTML5、JavaScript、jQuery的进阶知识,不仅如此,还会学习如何利用组件化的思想来开发网页,知识点+案例,使得所学可以更好的得到实践。

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师