'this'的价值是多少?

时间:2013-05-13 11:46:20

标签: javascript knockout.js

我试图理解下面的代码:

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

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

为什么设置' thisType'到这个' ?

http://knockoutjs.com/documentation/computedObservables.html

阅读文档

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

这是'这个'页面对象?

2 个答案:

答案 0 :(得分:3)

JS中的

这个指的是上下文执行

我喜欢quirksmode.org的摘录:

  

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

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

答案 1 :(得分:3)

我很高兴你问这个问题。 我喜欢把自己想象成一个经验丰富的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'是页面对象吗?

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