Javascript方法以字符串形式返回方法代码

Javascript方法以字符串形式返回方法代码,javascript,object,methods,Javascript,Object,Methods,我试图让我的对象的方法工作,但我遗漏了一些东西-可能非常明显 我找到了以下主题:但无论我尝试什么,我的方法都只是以文本字符串的形式返回函数代码 我还试着查看对象文字,但作为JS的新手,我不知道如何将初始参数传递给对象 所以,上下文 我正在创建一个网页,根据日期、时间和地点进行各种天文计算。我有一组年、月、日、时、分、秒、时区、纬度和经度的输入。我将此作为JS的学习经验,并理解计算 我正在创建一个全局日期对象来保存日期元素,我想创建一个计算朱利安日数的方法 我对代码进行了修改: function

我试图让我的对象的方法工作,但我遗漏了一些东西-可能非常明显

我找到了以下主题:但无论我尝试什么,我的方法都只是以文本字符串的形式返回函数代码

我还试着查看对象文字,但作为JS的新手,我不知道如何将初始参数传递给对象

所以,上下文

我正在创建一个网页,根据日期、时间和地点进行各种天文计算。我有一组年、月、日、时、分、秒、时区、纬度和经度的输入。我将此作为JS的学习经验,并理解计算

我正在创建一个全局日期对象来保存日期元素,我想创建一个计算朱利安日数的方法

我对代码进行了修改:

function DATE_OBJ(iyear、imonth、iday、idirty、ijd){
今年=年;
本月=月;
这一天=iday;
这个。脏=脏;
this.JD=DateJD;
}
函数DateJD(){
变量Y=目标年份;
var M=目标日期月份;
var D=对象日期;
if(M<3){
--Y;
M+=12;
}
如果(objDate.Year>1582){
var A=parseInt(Y/100,10);
var B=2-A+parseInt(A/4,10);
}否则{
如果(objDate.Year=1582&&M>10){
var A=parseInt(Y/100,10);
var B=2-A+parseInt(A/4,10);
}否则{
如果(objDate.Year=1582&&M=10&&D>=15){
var A=parseInt(Y/100,10);
var B=2-A+parseInt(A/4,10);
}其他变量B=0;
}
}
如果(Y<0)var C=parseInt((365.25*Y)-0.75,10);
else var C=parseInt(365.25*Y,10);
var E=parseInt(30.6001*(M+1),10);
this.JD=B+C+E+objDate.Day+1720994.5;
}
var d=新日期();
var objDate=new DATE_OBJ(d.getFullYear(),d.getMonth(),d.getDate(),false,0);
document.write(objDate.JD);​
正如您将看到的,结果是对象的JD属性被指定为方法代码的文本字符串,而不是计算结果

顺便说一句,如果我将DateJD创建为一个直函数并调用它,它就会工作并返回正确的结果

谢谢你的帮助!
Daz

使用
this.JD=DateJD
您没有分配返回值,而是分配一个可调用函数。因此,您的计算永远不会执行,而只是分配给成员变量

如果将
DateJD
的最后一行从

this.JD = B + C + E + objDate.Day + 1720994.5;

然后通过

document.write(objDate.JD());​
它将返回一个数字:

如果您在“构造函数”中执行函数,那么就没有可以使用的现有对象
objDate
,您将得到如下结果

未捕获的TypeError:无法读取未定义的属性“Year”


顺便说一句,您可能需要更改这些条件:

if (objDate.Year = 1582 && M > 10) {
这将objDate.Year分配给1582,而不是检查它是否等于。

取而代之的是
objDate.Year==1582

使用
this.JD=DateJD
您没有分配返回值,而是分配一个可调用的函数。因此,您的计算永远不会执行,而只是分配给成员变量

如果将
DateJD
的最后一行从

this.JD = B + C + E + objDate.Day + 1720994.5;

然后通过

document.write(objDate.JD());​
它将返回一个数字:

如果您在“构造函数”中执行函数,那么就没有可以使用的现有对象
objDate
,您将得到如下结果

未捕获的TypeError:无法读取未定义的属性“Year”


顺便说一句,您可能需要更改这些条件:

if (objDate.Year = 1582 && M > 10) {
这将objDate.Year分配给1582,而不是检查它是否等于。

objDate.Year==1582
为例。

非常感谢Dan!感谢时间!!感谢您发现分配错误!我在别的地方发现了这个,还以为我把它们都抓到了!非常感谢丹!感谢时间!!感谢您发现分配错误!我在别的地方发现了这个,还以为我把它们都抓到了!