JavaScript对象定义返回一个字符串,而不是整个对象

JavaScript对象定义返回一个字符串,而不是整个对象,javascript,javascript-objects,Javascript,Javascript Objects,我想知道我们是否可以定义一个像定位对象一样的对象。。。例如: var a = {a:'asd', b:someFunction}; console.log( a ); //Desired: 'asd' //Actual: Object {a,b}... console.log( a.a ); //> 'asd' console.log( a.b ); //> function() ... 这种行为与 在这一点上,我唯一可以模仿这一点的方法是通过toStrin进行scaping a

我想知道我们是否可以定义一个像定位对象一样的对象。。。例如:

var a = {a:'asd', b:someFunction};
console.log( a );
//Desired: 'asd'
//Actual: Object {a,b}...

console.log( a.a );
//> 'asd'
console.log( a.b );
//> function() ...
这种行为与

在这一点上,我唯一可以模仿这一点的方法是通过toStrin进行scaping

a.toString = ()-> return a.a
console.log( ''+a )
//> 'asd'
因此,在我们的代码中存在一种干净的方法来实现这一点,或者这种行为仅适用于系统变量?

您可以重写toString(),以便无论何时在字符串上下文中使用对象,都可以得到一个.a值。但是,这不会改变console.log(a)。如果这没有帮助,也许你应该编辑你的任务并提供更多关于你的用例的信息

var a = {
  a: 'asd',
  b: function someFunction() {}
};
a.toString = function() {
  return this.a;
};

alert(a);
// Dialog with 'asd'

console.log('Value of a: '+a);
// Console prints 'Value of a: asd'

console.log(a);
// Exact print depends on browser, but full object details will likely be shown

我找到的解决方案是使用字符串对象:

var a = new String('asd');
a.b = someUsefullFunction
但是has@jasonfetterly说,输出在很大程度上取决于所测试的浏览器,因此出于稳定性考虑,这在javaScript中是不可行的

此外,如果你想这样做,我在开始时说,其他点使用toString overide

a.toString = function(){return a.a};
console.log( ''+a )

我最近学到的这个问题的理论部分是(对象/函数)重载,在Java中是可行的//返回>“asd”?你确定吗?那没什么意义。如果我读对了,他想让它打印
'asd'
,而不是
Object{…}
。我已进行了编辑,如果您不同意@DanielFox,请将其还原。
console.log(window.location)
显示位置对象(至少在Chrome中),而不是您所描述的。实际用例是什么?如果您希望它用于调试目的,请编写自己的调试函数来调用toString方法。正如Alex所说,控制台没有标准化,因此输出根据浏览器甚至浏览器版本而有所不同。