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+”
是的,它应该是“厚颜无耻”的。我想在不使用任何修饰词的情况下调用它,比如模板文本等,只使用赋值<代码>常量魔法=评估对象相关:和