“this”的价值是什么?

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),那么它定义了计算可观察对象在评估时的this值。如果不传入它,就无法引用this.firstName()或this.lastName()。有经验的JavaScript编程人员会认为这很明显,但如果你还不熟悉JavaScript,这可能看起来很奇怪。(像C#和Java这样的语言从不期望程序员为this设置值,但JavaScript需要,因为默认情况下其函数本身不是任何对象的一部分。)"
'this'是页面对象吗?

1
可能这个变量在下面的某处被使用了...请展示整段代码!如果没有被使用,你可以省略它。 - Bergi
“this”是一个特殊的关键字,它指代“上下文”,并取决于函数如何被调用。在“new MyModel()”中,例如,它将是该实例。 - Bergi
可能是JavaScript中的“this”关键字的重复问题。 - Mark Schultheiss
这个关键字“this”指的是函数的调用上下文。在发布之前,请在此处进行搜索。这是一个非常相关的主题.JavaScript "this" 关键字. - H.Rabiee
2个回答

3
我很高兴你问这个问题。我认为自己是一个经验丰富的js程序员,但当我在knockout js文档中遇到这个问题时,我仍然会惊讶。
“为什么将thistype设置为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关键字的文档


3
在JS中,this指的是上下文执行的对象。我喜欢来自quirksmode.org的这段摘录:
JavaScript中,this总是指我们正在执行的函数的“所有者”,或者说是函数所属的对象。当我们在页面中定义一个名为doSomething()的函数时,它的所有者是该页面,换而言之,是JavaScript的窗口对象(或全局对象)。但是,onclick属性是属于它所属的HTML元素的。
因此,在您的示例中,this将具有MyModel实例化时的上下文值。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接