Javascript 作为函数调用时返回对象的值

Javascript 作为函数调用时返回对象的值,javascript,class,date,object,oop,Javascript,Class,Date,Object,Oop,我正在创建一个特定的类,在该类中,我希望在调用独立类时返回该类的值,而不是返回整个类模型 我见过其他人提出类似的问题,也见过使用valueOf和toString方法的推荐解决方案,但这些方法都需要将类作为字符串写入某个地方,或者以某种计算形式调用它。我希望我的类以这样一种方式工作:当我调用该类时,即使是在一个简单的控制台日志中,它自己也会返回它的值,而不需要关于其他可用属性和方法的任何其他细节。我相信有些人会说这是违反直觉的,可能不是一个好主意,但这是我的理想用例,这正是Date()对象的工作方

我正在创建一个特定的类,在该类中,我希望在调用独立类时返回该类的值,而不是返回整个类模型

我见过其他人提出类似的问题,也见过使用
valueOf
toString
方法的推荐解决方案,但这些方法都需要将类作为字符串写入某个地方,或者以某种计算形式调用它。我希望我的类以这样一种方式工作:当我调用该类时,即使是在一个简单的控制台日志中,它自己也会返回它的值,而不需要关于其他可用属性和方法的任何其他细节。我相信有些人会说这是违反直觉的,可能不是一个好主意,但这是我的理想用例,这正是
Date()
对象的工作方式,所以我觉得这一定是可能的

创建
Date
对象的新实例时,有很多方法可用(例如
getMonth()、getFullYear()、setTime()、toJSON()、toDateString()等
),但如果只调用Date对象的实例而不指定任何方法或属性,它似乎会返回日期,除非这只是一个浏览器控制台,通过显示某种形式的字符串化日期来帮助开发人员,否则默认情况下,他们不需要调用
.toString()
来获取字符串值

const now=new Date();
console.log(现在);
//->“2021-04-26T14:44:30.466Z”
console.log(现在是.toString());
//->2021年4月26日星期一10:44:59 GMT-0400(东部夏时制)
console.log(now.valueOf());

//->1619448336448
归根结底,您对
控制台的API功能没有太多控制权。当你交给它一件物品时,为了有帮助,它会给你物品的内容来探索。当然,控制台代码熟悉本机JavaScript类型,因此它可能会对日期实例之类的事情做一些特殊的处理,因为它再次尝试提供帮助。(这种“帮助性”会引起很多混乱,这里有成百上千的问题,可以追溯到人们不理解控制台试图做什么。)

因此,您可以将
.toString()
.valueOf()
方法添加到类中,并通过显式调用或隐式使用这些方法来利用它们进行调试等,如:

console.log("Current status: " + myObject);

+
连接运算符将隐式调用
.toString()
方法。

底线是您无法控制
控制台的API功能。当你交给它一件物品时,为了有帮助,它会给你物品的内容来探索。当然,控制台代码熟悉本机JavaScript类型,因此它可能会对日期实例之类的事情做一些特殊的处理,因为它再次尝试提供帮助。(这种“帮助性”会引起很多混乱,这里有成百上千的问题,可以追溯到人们不理解控制台试图做什么。)

因此,您可以将
.toString()
.valueOf()
方法添加到类中,并通过显式调用或隐式使用这些方法来利用它们进行调试等,如:

console.log("Current status: " + myObject);

+
串联运算符将隐式调用
.toString()
方法。

.toString()
.valueOf()
是您的两个选择。@Pointy这是我到目前为止看到的,但是为什么
Date
对象似乎在这方面得到了特殊的处理呢?因为Date原型有
.toString()
.valueOf()
方法,加上浏览器控制台做了各种奇怪的事情。这是我的主要问题。我的类同时使用
.toString()
.valueOf()
方法,但是当我将它们以数组形式记录到控制台时,我得到了一个充满对象的数组。我想我可以把数组映射到它们的值。@ScottMarcus我想问题是“我怎样才能让
console.log(myObject)
做我想做的事?”而答案是你几乎做不到。
.toString()
.valueOf()
是你的两个选择。@Pointy这就是我到目前为止看到的,但是为什么
Date
对象似乎在这方面得到了特殊的处理呢?因为Date原型有
.toString()
.valueOf()
方法,加上浏览器控制台做了各种奇怪的事情。这是我的主要问题。我的类同时使用
.toString()
.valueOf()
方法,但是当我将它们以数组形式记录到控制台时,我得到了一个充满对象的数组。我想我可以将数组映射到它们的值。@ScottMarcus我想问题是“我如何使
console.log(myObject)
做我想做的事?”答案是你几乎不能。谢谢,这正是我要找的!另外,您知道有没有类似的方法可以用于分解结构?例如,如果我可以对
{Class1,Class2}
进行分解,以返回如下
{Class1:Class1.value,Class2.value}
这样的对象,这将非常适合我的特定用例。值得注意的是,
+
作为串联、加法还是一元+取决于表达式中值的类型,例如,
+date
返回一个数字,
3+date
返回一个字符串谢谢,这正是我想要的!另外,您知道有没有类似的方法可以用于分解结构?例如,如果我可以对
{Class1,Class2}
进行分解,以返回如下
{Class1:Class1.value,Class2.value}
这样的对象,这将非常适合我的特定用例。值得注意的是,
+
作为串联、加法还是一元+取决于表达式中值的类型,例如,
+日期
r