关于js单例模式和构造函数静态方法的一些疑问

发布于 2022-09-12 03:20:27 字数 790 浏览 23 评论 0

<script>
    function box() {
        this.sex = "男"
        this.test = "测试"
    }
    box.admin = function () {
        console.dir(this.test);
        if (!this.test) {
            this.test = new box()
        }
        return this.test
    }
    box.admin()
    box.admin()
    box.admin()
    console.log(new box().sex)
    console.log(new box().test)
    console.log(new box.admin().test)
</script>

1.构造函数的静态方法admin里面的this指向box()构造函数,为什么第一次box.admin()输出的this.test不是"测试"而是undefined?
2.构造函数的静态方法admin方法里执行完里面的参数应该被回收,为什么第一次box.admin()输出为undefined,第二次输出this.test就有值了? 为new box()对象?如果没被销毁它存在于什么环境里面?
3.构造函数的静态方法admin方法里面的this.test 和构造函数本身的 this.test是什么关系?
4.如果静态方法里面的this.test没有被销毁 为什么在外部取不到静态方法里面this.test为对象的那个值 只能取到实例化构造函数的test值?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

沉睡月亮 2022-09-19 03:20:27
  1. 是指向box,但是box没有test属性,你说的test是在挂在的this是在box函数内部的,即只挂在在box实例化出来的对象上,box本身没有
  2. 执行完方法变量是会被回收,但是你在admin函数内将变量test挂在了box上,box不销毁,test不销毁
  3. 没关系,两个东西
  4. 用单例模式的话,admin不是一个构造函数,直接执行就好了.重点不是要获取test属性,单例模式本身不关注单例挂在哪,只要能获取同一个即可,使用闭包也可以做到
var a = box.admin();
var b = box.admin();
var c = box.admin();

a === b; // true 
a === c; // true

a === box.test; // true
落墨 2022-09-19 03:20:27

image.png

这是new的过程:

var obj={}; 
obj._proto_=Father.propotype; 
Father.call(obj); 
return obj;
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文