文字对象内的嵌套函数

发布于 2024-08-29 06:55:55 字数 449 浏览 5 评论 0 原文

如果在文字对象中我尝试在嵌套属性/函数中使用“this”引用函数,则这不起作用。为什么?嵌套属性有自己的作用域吗?

例如,我想从 d.f2 内部调用 f1:

var object = {    

  a: "Var a",
  b: "Var b",
  c: "Var c",

  f1: function() {
    alert("This is f1");
  },

  d: {
      f2: function() {
       this.f1();
    }
  },

  e: {
      f3: function() {
        alert("This is f3");
     }
  }
}

object.f1(); // 工作
对象.d.f2(); // 不工作。 对象.e.f3(); // 工作

谢谢,安德里亚。

if in a literal object i try to reference a function using "this" inside a nested property/function, this don't work. Why? A nested property have it's own scope?

For example, i want to call f1 from inside d.f2:

var object = {    

  a: "Var a",
  b: "Var b",
  c: "Var c",

  f1: function() {
    alert("This is f1");
  },

  d: {
      f2: function() {
       this.f1();
    }
  },

  e: {
      f3: function() {
        alert("This is f3");
     }
  }
}

object.f1(); // Work
object.d.f2(); // Don't Work.
object.e.f3(); // Work

Thanks, Andrea.

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

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

发布评论

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

评论(2

ˇ宁静的妩媚 2024-09-05 06:55:55

this 指的是 f2 中的 d,而不是 object。您可以存储对对象的引用,或者直接调用object,或者使用call/apply来调用函数并明确告诉它什么this 表示在该函数内部:

object.d.f2.call(object); // now this refers to object inside f2

this refers to d inside f2 and not object. You could store a reference to object, or call object directly, or use call/apply to call the function and explicitly tell it what this means inside that function:

object.d.f2.call(object); // now this refers to object inside f2
紙鸢 2024-09-05 06:55:55

这是一种基于 f2() 内 this 的上下文/192886">@slaver113 的想法

var object = (function() {
  var _this = {
    f1: function() {
      alert('This is f1');
    },
    d: {
      f2: function() {
        _this.f1();
      }
    }
  }

  return _this;
})();

object.d.f2(); // Alerts 'This is f1'

Here's an alternative approach which doesn't change the context of this inside f2(), based on @slaver113's idea:

var object = (function() {
  var _this = {
    f1: function() {
      alert('This is f1');
    },
    d: {
      f2: function() {
        _this.f1();
      }
    }
  }

  return _this;
})();

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