是否可以重新定义基础对象valueOf以返回内部prop的值?

时间:2019-07-25 18:13:48

标签: javascript object javascript-objects

问题:

是否可以重新定义基础对象valueOf以返回内部道具?

let obj = {
  x: 1,
  y: 2
}

obj     // 2 <- the value of obj.y
obj.x   // 1
obj.y   // 2

2 个答案:

答案 0 :(得分:1)

valueOftoStringtoJSON可用于处理部分(但不是全部)情况:

var obj = { a: 1, 
            b: 2, 
            c: 3, 
            toJSON  : function() { return this.a }, 
            valueOf : function() { return this.b }, 
            toString: function() { return this.c } }

console.log( obj, +obj, `${obj}` )

答案 1 :(得分:0)

当然可以定义一个返回成员的valueOf方法,但是您仍然需要以某种方式调用该方法-隐式地在转换中或显式地。 valueOf并不能神奇地使obj本身变得与众不同。

const obj = {
  x: 1,
  y: 2,
  valueOf() {
    return this.y;
  }
};

console.log(obj);
console.log(obj.x, obj.y)
console.log(obj.valueOf())
console.log(obj + 5)
console.log("y: " + obj)