【问题标题】:What is the value of 'this'?“这个”的价值是什么?
【发布时间】:2013-05-13 11:46:19
【问题描述】:

我正在尝试理解以下代码:

var MyModel = function (folders) {
    var thisType = this;

    this.callType = ko.computed({
        read: function () {
            return "openLink";
        },
        owner: this
    });

为什么将 'thisType' 设置为 'this' ?

http://knockoutjs.com/documentation/computedObservables.html阅读文档

“管理‘这个’ 如果您想知道 ko.computed 的第二个参数是什么(我们在前面的代码中传递 this 的位),它在计算计算的 observable 时定义了 this 的值。如果不传入它,就不可能引用 this.firstName() 或 this.lastName()。经验丰富的 JavaScript 编码人员会认为这是显而易见的,但如果您仍在了解 JavaScript,这可能会显得很奇怪。 (像 C# 和 Java 这样的语言从不期望程序员为此设置一个值,但 JavaScript 会,因为默认情况下,它的函数本身不属于任何对象。)"

'this' 是页面对象吗?

【问题讨论】:

  • 这个变量可能在下面的某个地方被使用了……向我们展示整个代码!如果没有,你可以省略它。
  • this 是指“上下文”的特殊关键字,取决于函数的调用方式。在new MyModel() 中,它将是实例。
  • JavaScript "this" keyword的可能重复
  • this 指向函数的调用上下文。请在发布前在 SO 上进行搜索。这是一个非常相关的线程JavaScript“this”关键字

标签: javascript knockout.js


【解决方案1】:

很高兴您提出这个问题。 我喜欢认为自己是一个相当有经验的 js 程序员,但当我在淘汰赛 js 文档中遇到这个问题时,我还是做了双重考虑。

为什么要把这个类型设置成这个?

在调用外部函数时,您可能仍希望访问this 引用的对象。使用闭包可以通过将this 保存到父函数中的变量来实现。

我能想到的最好的例子是 onclick 事件。

<div id="test">content</div>

document.getElementById("test").onclick = function(e){
    var self = this;

    function test(){
        alert(this); //[object Window]
        alert(self); //[object HTMLDivElement]
    }
    test();
};

'this' 是页面对象吗?

正如其他人所指出的,关于 this 关键字有很多 documentation

【讨论】:

    【解决方案2】:

    在JS中this是指上下文执行

    我喜欢quirksmode.org的这段摘录:

    在 JavaScript 中,this 总是指我们所使用的函数的“所有者” 执行,或者更确切地说,执行到函数是方法的对象。 当我们在页面中定义我们忠实的函数 doSomething() 时,它的 所有者是页面,或者更确切地说,是窗口对象(或全局对象) JavaScript。但是,onclick 属性归 HTML 元素所有 它属于。

    因此,在您的示例中,这将具有 MyModel 在实例化时刻的上下文的值。

    【讨论】:

      猜你喜欢
      • 2011-06-15
      • 2011-03-19
      • 1970-01-01
      • 2018-01-21
      • 2010-10-31
      • 2011-11-17
      • 2013-05-17
      • 2011-09-02
      • 2013-04-14
      相关资源
      最近更新 更多