JavaScript Object定义返回String而不是整个对象

时间:2016-07-01 19:41:30

标签: javascript javascript-objects

我想知道我们是否可以定义一个Object,就像它是位置对象一样......例如:

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() ...

此行为适用于location

此时我可以模仿的唯一方法是通过toStrin

进行操作
a.toString = ()-> return a.a
console.log( ''+a )
//> 'asd'

那么,在我们的代码中存在一种干净的方法来实现这一点,或者这种行为只适用于系统变量吗?

2 个答案:

答案 0 :(得分:0)

您可以覆盖toString(),这样无论何时在字符串的上下文中使用该对象,都会获得a.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

答案 1 :(得分:0)

我找到的解决方案是使用String对象:

var a = new String('asd');
a.b = someUsefullFunction

但是@ jason-fetterly说输出很大程度上取决于你测试的浏览器,因此在稳定性问题上这在javaScript中是不可行的。

另外如果你想要这个,我在开头说,其他点使用toString overide

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

我后面学到的这个问题的理论部分是(对象/函数)重载,可以在Java中使用。