使用对象属性-Javascript

使用对象属性-Javascript,javascript,object,Javascript,Object,如何从另一个属性中引用对象属性值: 我的对象属性包含多个计算函数,我希望从同一对象中访问这些值 如果我在distanceKM中使用它,我是指distanceKM还是指父对象myObj 谢谢 我的用法基于JLRishe的回答: 本质上,对象文字不能引用自身,因此不能执行以下操作: var myObj = { distance: function(){ var x=2, y=2; return x + y ;}, distanceKm: this.distance() * 1.6 /

如何从另一个属性中引用对象属性值:

我的对象属性包含多个计算函数,我希望从同一对象中访问这些值

如果我在distanceKM中使用它,我是指distanceKM还是指父对象myObj 谢谢

我的用法基于JLRishe的回答:


本质上,对象文字不能引用自身,因此不能执行以下操作:

var myObj = {
    distance: function(){ var x=2, y=2; return x + y ;},
    distanceKm: this.distance() * 1.6 // Will not work -  `this` does not 
                                      // refer to myObj here
};
console.log(myObj.distanceKm);
var myObj = {
    distance: function (unit) {
        var radlat1 = Math.PI * this.goingFrom[0] / 180;
        var radlat2 = Math.PI * this.goingTo[0] / 180;
        var radlon1 = Math.PI * this.goingFrom[1] / 180;
        var radlon2 = Math.PI * this.goingTo[0] / 180;
        var theta = this.goingFrom[0] - this.goingTo[0];
        var radtheta = Math.PI * theta / 180;
        var dist = Math.sin(radlat1) * Math.sin(radlat2) + Math.cos(radlat1) * Math.cos(radlat2) * Math.cos(radtheta);
        dist = Math.acos(dist);
        dist = dist * 180 / Math.PI;
        dist = dist * 60 * 1.1515;
        if (unit === "K") {
            dist = dist * 1.609344
        } else if (unit === "N") {
            dist = dist * 0.8684
        }
        return dist;
    },
    distanceKm: function () { return this.distance("K"); },
    distanceN: function () { return this.distance("N"); },
    goingFrom: [x1, y1],
    goingTo: [x2, y2]
}
console.log(myObj.distanceKm());
但是,如果distanceKm是一个函数,则可以执行以下操作:

这是可能的,因为distance km中的This在创建myObj之后实际调用时具有意义,而不是在创建myObj时

所以这实际上是一个你想做什么的问题。用词来说,你的问题太模糊了,不能以这样或那样的方式得出结论

第一种方法的一种替代方法将起作用,即在事实发生后分配一些属性:

var myObj = {
    distance: function(){ var x=2, y=2; return x + y ;}
};
myObj.distanceKm = myObj.distance() * 1.6;
console.log(myObj.distanceKm);
另一种方法是使用立即调用的函数,并在使用对象文字之前定义一些部分:

var myObj = (function () {
    function ds() { var x = 2, y = 2; return x + y; }

    return {
        distance: ds,
        distanceKm: ds() * 1.6
    };
})();
作为旁注,请使用var声明变量。使用变量而不声明它们是非常糟糕的做法

编辑:关于你的具体例子,这将涉及到之前的任何内容。当你调用一个函数时。您可以这样定义对象:

var myObj = {
    distance: function(){ var x=2, y=2; return x + y ;},
    distanceKm: this.distance() * 1.6 // Will not work -  `this` does not 
                                      // refer to myObj here
};
console.log(myObj.distanceKm);
var myObj = {
    distance: function (unit) {
        var radlat1 = Math.PI * this.goingFrom[0] / 180;
        var radlat2 = Math.PI * this.goingTo[0] / 180;
        var radlon1 = Math.PI * this.goingFrom[1] / 180;
        var radlon2 = Math.PI * this.goingTo[0] / 180;
        var theta = this.goingFrom[0] - this.goingTo[0];
        var radtheta = Math.PI * theta / 180;
        var dist = Math.sin(radlat1) * Math.sin(radlat2) + Math.cos(radlat1) * Math.cos(radlat2) * Math.cos(radtheta);
        dist = Math.acos(dist);
        dist = dist * 180 / Math.PI;
        dist = dist * 60 * 1.1515;
        if (unit === "K") {
            dist = dist * 1.609344
        } else if (unit === "N") {
            dist = dist * 0.8684
        }
        return dist;
    },
    distanceKm: function () { return this.distance("K"); },
    distanceN: function () { return this.distance("N"); },
    goingFrom: [x1, y1],
    goingTo: [x2, y2]
}
console.log(myObj.distanceKm());

距离km应该是一个函数还是一个值?让我们假设两者都是,有些函数执行类似于距离的计算,而其他函数则需要引用该值。如果distanceKm是一个函数,您在myObj上调用它,如myObj.distanceKm,则distanceKm函数中的“是”将引用myObj.myObj.distance是一个函数定义,而不是函数调用。返回值只有在您实际调用它之后才存在。因此,在distanceKm中引用distanceKm将调用函数myObj.distance而不是this.distance,如果distance是一个字符串,我将引用this.distance?我知道这个问题很广泛,但这回答了我关于何时使用它的疑问。谢谢你,我已经包括了以上我的功能。再次感谢。
var myObj = {
    distance: function (unit) {
        var radlat1 = Math.PI * this.goingFrom[0] / 180;
        var radlat2 = Math.PI * this.goingTo[0] / 180;
        var radlon1 = Math.PI * this.goingFrom[1] / 180;
        var radlon2 = Math.PI * this.goingTo[0] / 180;
        var theta = this.goingFrom[0] - this.goingTo[0];
        var radtheta = Math.PI * theta / 180;
        var dist = Math.sin(radlat1) * Math.sin(radlat2) + Math.cos(radlat1) * Math.cos(radlat2) * Math.cos(radtheta);
        dist = Math.acos(dist);
        dist = dist * 180 / Math.PI;
        dist = dist * 60 * 1.1515;
        if (unit === "K") {
            dist = dist * 1.609344
        } else if (unit === "N") {
            dist = dist * 0.8684
        }
        return dist;
    },
    distanceKm: function () { return this.distance("K"); },
    distanceN: function () { return this.distance("N"); },
    goingFrom: [x1, y1],
    goingTo: [x2, y2]
}
console.log(myObj.distanceKm());