默认
发表评论 2
想开发IM:买成品怕坑?租第3方怕贵?找开源自已撸?尽量别走弯路了... 找站长给点建议
[已回复] 关于RainbowChat-Web 中 JS 模块编写的设计模式疑问
var RBChatRosterUI = (function () {

    // 构造器(相当于java里的构造方法)
    var Cache2 = function (argument){

        // 好友列表数据模型,数据为一维RosterElementEntity对象数组
        this.rosterData = new Array();
    };

    return Cache2;
})();

代码里常见这种写法,经过查阅资料,我了解到  (function(){ } )(); 是一种 js的立即执行函数表达式(IIFE,请问这样写是为了防止变量名污染吗?

另外,构造器这样赋值后,可以在外部调用该方法,请问这个是什么原理,我在网上查了半天没查到,还请您指导一下。
Cache2.prototype.xxx = function(){
       //do something
    };

即时通讯网 - 即时通讯开发者社区! 来源: - 即时通讯开发者社区!

微信图片_20220114194232.png (116.52 KB, 下载次数: 1018)

微信图片_20220114194232.png
推荐方案
评论 2
这其实是几种JS编码技巧放一起了。

1)(function () {  })(); 这其实是自执行的匿名函数写法,看起来有点怪,但这是js里很惯用的写法。具体你看看这个帖子:https://www.cnblogs.com/ooplus/p/5468338.html

2)Cache2.prototype.xxx = function(){
       //do something
    };   这其实面向对象的写法,目的是新建一个类,具体你学习一下这个链接:http://www.ruanyifeng.com/blog/2 ... _encapsulation.html

第1)2)两种写法放一起,就是将第2)种中定义的类,new后,return给了这个匿名函数,而这个匿名函数的返回值又赋给了 “var RBChatRosterUI = 匿名自执行函数”这样的全局变量。从而实现了一个不污染全局的全展对象实例。
感谢,又学习新知识了!
打赏楼主 ×
使用微信打赏! 使用支付宝打赏!

返回顶部