jaywcjlove / cookie.js

:cookie: A simple, lightweight JavaScript API for handling browser cookies , it is easy to pick up and use, has a reasonable footprint(~2kb, gzipped: 0.95kb), and has no dependencies. It should not interfere with any JavaScript libraries or frameworks. https://jaywcjlove.github.io/cookie.js/
https://jaywcjlove.github.io/cookie.js
185 stars 55 forks source link

大佬,有个小建议 #4

Closed mrzqii closed 6 years ago

mrzqii commented 6 years ago

今天在学习插件的封装,所以研究了你的一些插件封装的思路,从你的代码里面获益匪浅,在这例发现一个问题,就是每次调用cookie()的时候都会去执行:

function Cookie() {
        if (!(this instanceof Cookie)) {
            return new Cookie();
        }
}

意味着每次都会创建一个新的实例,这样做在设计和性能方面都不是很好,我建议最好只创建一个实例就可以了。可以做如下改装:

function Cookie() { }
function init() {
        if ( !this.instance ){         
            this.instance = new Cookie();
        }     
        return this.instance; 
}

var cookie = function(name,value,option) {
        var arg = arguments;
        if(arg.length === 0) return init().all();
}

不知道我的思路怎么样?

jaywcjlove commented 6 years ago

@mrzqii 开始有思考,有前途有进步

jaywcjlove commented 6 years ago

if(!(this instanceof Cookie)) {
  return new Cookie()
};
``

这个就是防止重复 `new` 的判断
mrzqii commented 6 years ago
if(!(this instanceof Cookie)) {
  return new Cookie()
};
``

这个就是防止重复 `new` 的判断

没有起到作用哦:

把这里打一个log

if(!(this instanceof Cookie)) {
  console.log(1)
  return new Cookie()
};

然后调用:

<body>
    <script src="./cookie.js"></script>
    <script>
        cookie()
        cookie()
        cookie()
    </script>
</body>

打印的log:
1
1
1

因为每次调用Cookie()的时候this都是指向window

jaywcjlove commented 6 years ago

@mrzqii 了解