JavaScript学习笔记(十五) 对象即时初始化

对象即时初始化(Immediate Object Initialization)

另一种可以防止全局作用域"污染",和前面的数的立即执行函数类似,就是对象即时初始化(Immediate Object Initialization)模式;
这种模式使用一个带init()方法的对象,init()在对象创建后被立即执行;
这个init()方法会完成所有的初始化工作:
({
    // here you can define setting values
    // a.k.a. configuration constants
    maxwidth: 600,
    maxheight: 400,
    // you can also define utility methods
    gimmeMax: function() {
        return this.maxwidth + "x" + this.maxheight;
    },
    // initialize
    init: function() {
        console.log(this.gimmeMax());
        // more init tasks...
    }
}).init();
从语法角度来说,使用这种模式很像使用对象字面量声明一个普通对象;
你也可以将字面量包裹在一对括号中,这可以告知JavaScript引擎将这对大括号作为对象字面量处理,而不是代码块;
当你在结束小括号之后,就立即调用init()方法。

你也可以讲init()方法调用包裹进小括号中,而不是仅仅只包含对象;
换言之,就是下面这两种情况都能正常工作:
({...}).init();
({...}.init());
这种模式的好处和立即执行函数模式一样:当你执行一次性的初始化工作时,保护了全局作用域(没有增加全局变量);
在语法上,对象即时初始化看起来可能比仅包裹的一段代码匿名函数要复杂些;
但如果你的初始化工作更加复杂(实际上它们经常这样),会向整个初始化过程添加代码;
例如:私有的辅助函数都会清楚的被区分出来,因为他们都是这个临时对象的属性;
然而在立即执行函数中,它们很可能就是分散的函数。

这种模式的一个缺点就是绝大部分JavaScript压缩工具压缩这种模式的时候没有压缩在函数的中的代码有效率;
私有属性和方法不会被重命名更短的名称,因为从压缩工具的角度,这样是不安全的。

这种模式主要适合一次性的工作,并且这个对象在init()调用完成方法结束之后就不会再被访问;
如何你想在init()方法执行之后持有这个对象的引用,你可以很简单的实现这个功能,通过在init()方法的末尾加上 return this;








  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值