aigaogao
 1 var obj = function (params) {
 2     var btn = {
 3       type: {
 4         text: 11
 5       },
 6       setType: function (text) {
 7         btn.type =  {
 8           text: text
 9         }
10       },
11       init: function (text, mark) {
12         btn.setType(text)
13         if(mark) btn.addEvent()
14       },
15       addEvent: function (params) {
16         var events = {
17           a: function (params) {
18             $('#btn').on('click', function (params) {
19               btn.showText()
20             })
21           }
22         }
23 
24         for (var key in events) {
25           events[key]()
26         }
27       
28       },
29       showText: function () {
30         console.log(btn.type)
31       }
32     }
33     return btn 
34   }
35   
36   obj().init(222, true)
37   setTimeout(() => {
38     console.log('设置完了')
39     obj().init(9999)
40   }, 1000 * 6);

1.预想结果

222,9999

2.实际结果

222,222

3.原因

这里每次调用init时都要执行一次obj()方法,所以得到的内容已经不再是相同的一个了;第一次进行init时,完成了事件绑定,而第二次未再进行事件绑定,所以事件绑定中的btn一直是第一个内容;所以输出一直为第一次的222

4.解决

var obj=(function(){})()
让obj为一个立即执行函数,之后用obj.init()直接调用

相关文章:

  • 2021-11-17
  • 2021-11-30
  • 2022-01-31
  • 2022-01-23
  • 2021-04-01
  • 2021-10-08
  • 2021-12-26
猜你喜欢
  • 2021-11-20
  • 2021-10-15
  • 2021-08-29
相关资源
相似解决方案