【问题标题】:KnockoutJS: this / self objects output the entire Window objectKnockoutJS:this/self 对象输出整个 Window 对象
【发布时间】:2014-12-17 20:55:58
【问题描述】:

我可能在这里误解了一些东西,但是为什么我的this / self 总是将整个 Window 对象输出到控制台中?

var myViewModel = function() {
    var self = this;
    console.log('My viewModel');
    console.log(self);
}();

这会导致以下控制台输出

我完全误解了this 对象吗?

【问题讨论】:

  • 在这种情况下,通常 self 是最后一个实例化的对象,您将其设置为this,因此记录self 将记录this 的内容
  • 我刚刚意识到我一直在使用var blah = function() {},而不是function blah() {}。第二个给了我预期的结果!啊。
  • 不,问题是你在最后一行有()。它立即调用函数并将返回值(undefined)分配给myViewModel

标签: javascript knockout.js


【解决方案1】:

我完全误解了这个对象吗?

可能是,但我不知道你的期望,所以我无法回答。

this之所以引用window,是因为函数立即执行。在以foo()(非严格模式)执行的函数中,this 指的是全局对象(window)。

注意末尾的()

var myViewModel = function() {
    var self = this;
    console.log('My viewModel');
    console.log(self);
}(); // <--

这使函数立即执行并将undefined返回到myViewModel,您可以通过在函数内部和之后添加console.log语句轻松验证。

我猜你想省略这些并将函数本身分配给myViewModel

var myViewModel = function() {
    var self = this;
    console.log('My viewModel');
    console.log(self);
}; // <--

Learn more about this.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-23
    • 2011-02-21
    • 2022-01-21
    • 1970-01-01
    • 2023-01-05
    • 1970-01-01
    相关资源
    最近更新 更多