Javascript 当一个对象被直接访问时,它是否可能有一个值,并且在其中嵌套对象?

Javascript 当一个对象被直接访问时,它是否可能有一个值,并且在其中嵌套对象?,javascript,Javascript,我想知道在Javascript中,对象属性是否可能具有以下行为: console.log(obj); // output 'Something' console.log(obj.prop_a); // output 'A' 而且 var a = obj; // a === 'Something' var b = obj.prop_a; /// b === 'A' 对象有两个版本,一个是直接访问它,另一个是访问它的子道具 谢谢是的,您可以重写toString()方法: obj.toString

我想知道在Javascript中,对象属性是否可能具有以下行为:

console.log(obj); // output 'Something'
console.log(obj.prop_a); // output 'A'
而且

var a = obj; // a === 'Something'
var b = obj.prop_a; /// b === 'A'
对象有两个版本,一个是直接访问它,另一个是访问它的子道具


谢谢

是的,您可以重写
toString()
方法:

obj.toString = function() {
    return "Something";
}

如果需要在浏览器中工作,则必须钩住控制台,并重写对象的toString方法

You could hook the browser console, and redefine it afterwards:

var obj = {
  prop_a: "A",
  toString: function() {
    return "Something";
  }
};

var origConsole = console;

console = {
  log: function(data) {
    if (typeof data === "object") {
        origConsole.log(data.toString());
    } else {
        origConsole.log(data);
    }
  }
}

console.log(obj);

那很好,我没想过。我不确定我是否总是想打印值;我不确定这在不同的浏览器和不同的行为下如何工作,但在alert中它会工作。然而,看看JSFIDLE演示,它是针对
node.js
的,所以它在后台运行ES5。实际上,我正在寻找一个更通用的解决方案,而不仅仅是打印
obj
的值。例如,如果我做了
var a=obj
,那么a将等于
Something
,我仍然可以访问
a.prop_a
。我想这是不可能的。@Michael,我想不可能。@Jon,这里有一些特定的用例,或者只是想知道?@Jon。我有一个对象,当直接访问它时,我不能更改它的值,但我想在传递时将更多信息粘贴到它,所以只需向它添加一个属性。问题出在哪里
obj.prop_a=“a”
@Jon因为当只访问
obj
时,它将返回
{“prop_a”:“a”}
,我想返回一个不同的值您真的需要在对象上添加额外的信息吗?jQuery允许您使用
.data
在对象上放置任意数量的信息,但它将其存储在单独的容器中。