javascript 这几种写法的优缺点,各适用于哪种情况?

发布于 2022-09-01 17:19:25 字数 1835 浏览 19 评论 0

demo1

  var demo = (function(){
        var that ={}
        that.register = function(ns,maker){
            var step = that;
            var NSlist = ns.split('.')
            while(k = NSlist.shift()){
                if(NSlist.length){
                    if(step[k]===undefined){
                        step[k] = {}
                    }
                    step = step[k]
                }else{
                    if(step[k]===undefined){
                        try {
                            step[k] = maker()
                        } catch(exp) {}
                    }
                }
            }
        }
        return that
    }())
    demo.register('core.arr.inArray',function(){
        return function(o){
            return Object.prototype.toString.call(o)==='[object Array]'
        }
    })
    var arr = [11,33,55]
    console.log( demo.core.arr.inArray(arr))

   

demo2

 
    ;(function(){
        var demo2 = function(){}
        demo2.prototype={
                isArray : function(o){
                    return Object.prototype.toString.call(o)==='[object Array]'
                }
        }
        window.demo2 = demo2
    }())
    var arr2 =[22,66];
    var user1 = new demo2();
   console.log( user1.isArray(arr2))

demo3

 var demo3 = {
        isArray : function(o){
            return Object.prototype.toString.call(o)==='[object Array]'
        }
    }
    console.log(demo3.isArray(arr))

demo4

 var demo4 = (function(){
        return {
            isArray : function(o){
                return Object.prototype.toString.call(o)==='[object Array]'
            }
        }
    }())
    console.log( demo4.isArray(arr))

不知道这两种写法 哪种更优一点 哪种适用于什么情况
还请知道的 指导一下

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

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

发布评论

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

评论(6

失退 2022-09-08 17:19:25

demo1 适合管理比较大一点儿的项目,一两个的话没有必要,我觉得这样写更适合库,给插件留接口。
demo2 完全没有必要把 demo2定义为一个函数(仅从这个实例来说)
demo3 和 demo4 从写法来说对其他 js 代码的影响是相同的,所以 demo4 根本没有没必要
一般的这样写就够了:

;(function(){
    var demo3 = {
        isArray : function(o){
            return Object.prototype.toString.call(o)==='[object Array]'
        }
    };
    window.demo3 = demo3;
    })();

    console.log(demo3.isArray(arr))
作妖 2022-09-08 17:19:25

可以了解下模块化开发和面向对象

东京女 2022-09-08 17:19:25

如果是我的话,我选第三种。如果你的问题是,“工具函数如何封装?”,那建议直接参考lodash源码。有利于理解。

其他写法在这类工具函数的设计里,都有点过度设计了。不知道想保护什么东西

过度放纵 2022-09-08 17:19:25

从你的这些demo来看,你是想写一个isArray这样的函数。这个函数只需要一个object(可能是参数的形式isArray(object),也可能是object.isArray()的形式)。单从这点来说,就不推荐你用第二种了,当然不是说第二种的不好,第二种也有自己的优势。第三和第四种没什么本质区别,第一种是不推荐的,虽然看起来是有不错的扩展性,然而却和第二种在本质上是一样的(都是给对象临时加一个isArray的方法)。

优劣自选,哪样简单而不失效果,就选哪个吧。思考问题可以从你想要做什么而开始。

瑶笙 2022-09-08 17:19:25

你完全可以去找个TypeScript编译器,然后这么写……

class Demo{
    static isArray(o:any):boolean {
        return Object.prototype.toString.call(o)==='[object Array]';
    }
}

反正未来是ES6的,提前享受一下也没什么问题嘛。

小瓶盖 2022-09-08 17:19:25

@solar @leftstick @曜曜OvO
曾经回答过我问题的人 希望能解答

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