Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/456.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 有没有一种方法可以重写对象属性以将其转换为特殊的内容_Javascript - Fatal编程技术网

Javascript 有没有一种方法可以重写对象属性以将其转换为特殊的内容

Javascript 有没有一种方法可以重写对象属性以将其转换为特殊的内容,javascript,Javascript,我有一个奇怪但有趣的问题,我将从例子开始 假设我有一个物体,看起来像这样: const stringEvaluate = { toString: () => 'Im object' } const numberEvaluate = { valueOf: () => 1337 } const evaluatedObject = { someProperty: () => 'I was object, but not now' } const magic

我有一个奇怪但有趣的问题,我将从例子开始

假设我有一个物体,看起来像这样:

const stringEvaluate = {
    toString: () => 'Im object'
}
const numberEvaluate = {
    valueOf: () => 1337
}
const evaluatedObject = {
   someProperty: () => 'I was object, but not now'
}

const magic = evaluatedObject

console.log(magic)
//'I was object, but not now'
现在我可以使用这个对象创建字符串了

stringEvaluate + ' stringified'

// Im object stringified
我也可以这样做:

const stringEvaluate = {
    toString: () => 'Im object'
}
const numberEvaluate = {
    valueOf: () => 1337
}
const evaluatedObject = {
   someProperty: () => 'I was object, but not now'
}

const magic = evaluatedObject

console.log(magic)
//'I was object, but not now'
把这个物体变成:

numberEvaluate + 682

// 2019
我的问题是: 我是否可以覆盖一些对象属性,以帮助我执行以下操作:

const stringEvaluate = {
    toString: () => 'Im object'
}
const numberEvaluate = {
    valueOf: () => 1337
}
const evaluatedObject = {
   someProperty: () => 'I was object, but not now'
}

const magic = evaluatedObject

console.log(magic)
//'I was object, but not now'

控制台显示对象的方式是。然而,如果控制台在日志记录时会产生副作用,或者换句话说,如果它在执行时调用对象的方法,那么这将是一种非常糟糕的行为。所以,不,你想做的是不可能的,我也不认为有任何用处

如果您想丰富调试体验,仍然可以添加自己的记录器:

 const log = (...args) => {
   console.log(`It is ${new Date}`, ...args);
 };

您想要覆盖什么并不十分清楚。返回值还是整个方法?我的意思是,当我调用对象时,它不应该返回带有属性的自身,但它将返回其他类型的数据。在我的示例中,
magic
将是相等的
{someProperty:ƒ}
我希望它是相等的
'我曾经是对象,但现在不是。
你难道不能将
magic
设置为函数的结果:
const magic=evaluatedObject.someProperty()
。。。?或者,如果您正在寻找“厚颜无耻”的东西,请重写第一个示例中的
.toString()
,然后执行
const magic=`${evaluatedObject}`
const magic=evaluatedObject+”
是的,它应该是“厚颜无耻”的。我想在不使用任何修饰词的情况下调用它,比如模板文本等,只使用赋值<代码>常量魔法=评估对象相关:和