【问题标题】:jQuery closure & object property accessjQuery 闭包和对象属性访问
【发布时间】:2009-06-29 07:06:16
【问题描述】:

谁能告诉我如何在这里访问变量“a”:

变种测试 = { 一个:3, 初始化:函数(){ $("body").click(function() { 警报(一); }); } }; 测试.init();

这也不起作用:alert(this.a);

提前致谢。

【问题讨论】:

    标签: jquery closures


    【解决方案1】:

    其实我更喜欢这个:self设置和初始化:

    函数 createX() { 变量自我 = { 初始化:函数(){ $("body").click(this.doit); }, doit:函数(数据,b){ 警报(self.testing()); }, 测试:函数(){ 返回 4; } } self.init(); 回归自我; } $(函数(){ 创建X(); });

    【讨论】:

      【解决方案2】:

      你必须引用对象:

      test.a
      

      【讨论】:

      • 这将代码与整个对象存储在名为“test”的变量中这一事实相结合。这不是一个好的模式,因为测试在对象外部。
      【解决方案3】:

      添加自我引用:-

      var test = {
         a: 3,
         init: function() {
             var self = this
             $("body").click(function() {
                alert(self.a);
             });
         }
      };
      

      【讨论】:

      • 这通常有效,但如果出现以下情况会失败:test.init.call(otherContext)
      • @Machine: 是的,但你为什么要这样做?访问对象外部的变量可能会起作用,但这样做会导致一些严重的意大利面。这种模式应该被认为是难闻的气味,并尽可能避免
      • 好的,这行得通:
         var test = { a: 3, init: function() { var self = this; $("body").click(function() { test.doit(); }); }, doit: function() { var self = this;警报(self.a); } }; 
        但我需要重用 doit 函数,所以现在这不起作用:
         var test = { a: 3, init: function() { var self = this; $("body").click(self.doit); }, doit: function() { var self = this;警报(self.a); } }; 
        因为 doit 中的“this”指的是 $("body") obj。想法?
      【解决方案4】:

      好的,这行得通:

      变种测试 = { 一个:3, 初始化:函数(){ 变种自我=这个; $("body").click(函数() { self.doit(); }); }, doit:函数(){ 变种自我=这个; 警报(self.a); } };

      但我需要重用 doit 函数,所以现在这不起作用:

      变种测试 = { 一个:3, 初始化:函数(){ 变种自我=这个; $("body").click(self.doit); }, doit:函数(){ 变种自我=这个; 警报(self.a); } };

      【讨论】:

        【解决方案5】:

        好的,这解决了第二个问题:

        功能测试() { 变量自我; 返回 { 初始化:函数(){ 自我=这个; $("body").click(this.doit); }, doit:函数(数据,b){ 警报(self.testing()); }, 测试:函数(){ 返回 4; } } } $(函数(){ 变量 x = 测试(); x.init(); });

        【讨论】:

        • 阅读 SOFAQ 可能对您有所帮助。请不要像论坛或 NG 一样继续添加答案。只需完善您现有的答案。
        猜你喜欢
        • 2022-01-23
        • 1970-01-01
        • 1970-01-01
        • 2017-09-24
        • 2011-11-09
        • 2012-07-30
        • 1970-01-01
        • 2021-03-05
        • 1970-01-01
        相关资源
        最近更新 更多