4

我试图理解下面的代码:

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阅读文档

“管理 'this' 如果你想知道 ko.computed 的第二个参数是什么(我们在前面的代码中传递 this 的位),它在评估计算的 observable 时定义了 this 的值。没有传递它,不可能引用 this.firstName() 或 this.lastName()。有经验的 JavaScript 编码人员会认为这是显而易见的,但如果你还在了解 JavaScript,它可能看起来很奇怪。(像 C# 和Java 从不期望程序员为此设置一个值,但 JavaScript 确实如此,因为默认情况下,它的函数本身不是任何对象的一部分。)”

'this' 是页面对象吗?

4

2 回答 2

3

在 JS 中this指的是上下文执行

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

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

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

于 2013-05-13T12:01:07.023 回答
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' 是页面对象吗?

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

于 2013-05-13T12:52:51.520 回答