Javascript Knockout.js中计算的可观察函数的数据上下文

Javascript Knockout.js中计算的可观察函数的数据上下文,javascript,knockout.js,Javascript,Knockout.js,我正在比较在Knockout.js中使用计算可观察函数的两种方法 问题: 函数中的“this”关键字是否可以引用其父对象(外部,而不是函数内部) 为什么版本2即使不在末尾添加上下文值也可以工作 ///Version 1 my.Product = function () { this.id = ko.observable(); this.salePrice = ko.observable(); this.photo = ko.obse

我正在比较在Knockout.js中使用计算可观察函数的两种方法

问题:

  • 函数中的“this”关键字是否可以引用其父对象(外部,而不是函数内部)
  • 为什么版本2即使不在末尾添加上下文值也可以工作

        ///Version 1
        my.Product = function () {
            this.id = ko.observable();
            this.salePrice = ko.observable();
            this.photo = ko.observable();
            this.shortDescription = ko.observable();
            this.photoUrl = ko.computed
            (function () {
                return photoPath + this.photo();
            },this);  //**context**
        };
    
        ////version 2
        my.Product = function () {
            var self = this;
            self.id = ko.observable();
            self.salePrice = ko.observable();
            self.photo = ko.observable();
            self.shortDescription = ko.observable();
            self.photoUrl = ko.computed(function () {
                return photoPath + self.photo();
            });//why there is no "self" here
        };
    

  • 我不确定我是否理解你的第一个问题。在第一种情况下,传递“this”是为了能够在计算函数中将“this”称为“this”。它是专门针对敲除的,但敲除可能使用或。两者都允许重新定义“这个”。 如果没有将“this”作为第二个参数传递,“this”将引用计算的函数范围。这张照片是未定义的

    第二种情况是常见的javascript“技巧”。它包括将“this”赋值给一个变量,以便能够在另一个范围中引用它。您不必将“self”作为参数传递,因为它是一个变量,可以从函数中访问

    这两个例子都是有效的。我个人更喜欢第二种方法,因为它是处理javascript执行上下文的一种更常见的方法