使用对象属性-Javascript
如何从另一个属性中引用对象属性值: 我的对象属性包含多个计算函数,我希望从同一对象中访问这些值 如果我在distanceKM中使用它,我是指distanceKM还是指父对象myObj 谢谢 我的用法基于JLRishe的回答:使用对象属性-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 /
本质上,对象文字不能引用自身,因此不能执行以下操作:
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());