Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在javascript中记录对象时强制执行toString_Javascript_Oop - Fatal编程技术网

如何在javascript中记录对象时强制执行toString

如何在javascript中记录对象时强制执行toString,javascript,oop,Javascript,Oop,我想知道是否可以从以下代码中获取“content here”作为响应(例如日志): function Obj () { this.toString = function(){ return "content here" }; } var obj = new Obj; console.log(obj); 我知道我可以用String()、toString()和“+obj”强制它,但我想知道是否有办法从对象内部强制它。您的编辑添加 我知道我可以用String()、toString()和“+o

我想知道是否可以从以下代码中获取“content here”作为响应(例如日志):

function Obj () {
    this.toString = function(){ return "content here" };
}
var obj = new Obj;
console.log(obj);
我知道我可以用String()、toString()和“+obj”强制它,但我想知道是否有办法从对象内部强制它。

您的编辑添加

我知道我可以用String()、toString()和“+obj”强制它,但我想知道是否有办法从对象内部强制它

…改变了问题。简单的回答是“不,你不能在对象内这样做。”为了调用对象上的
toString
,需要说“我想要这个的原始形式”(或者特别是“我想要这个的字符串形式”)
console.log
不这样做,它提供了比这更丰富的信息

在对象上放置一个
toString
,意味着每当它转换为字符串时,函数都会被调用,但它不会指定何时发生。您还可以使用
valueOf
。规范中有更多关于这方面的内容:,和

但是将
添加到字符串
(或
valueOf
)并不能让您指定它发生的时间;不能,这只是通过JavaScript规则或调用代码(显式或隐式)实现的


原始答案

最简单的方法是在其上使用
String

console.log(String(obj));
您可以添加自己的方法:

console.logString = function(s) {
    console.log(String(s));
};

您可以更改
日志

var old = console.log;
console.log = function(s) {
    var a = Array.prototype.map.call(arguments, function(a) {
        return String(a);
    };
    return old.apply(console, a);
};

…但是我不推荐它

不,我的意思是不使用String().toString()或“”+obj@user3633687:
log
不会这样做。这就是为什么我建议您可以添加自己的方法。我想你可以替换
log
,但我不会。(我在答案中添加了说明如何进行)是的,但我想知道是否有一种方法可以从对象本身之间强制它。例如,如果clasList显然是一个对象而不是一个简单的属性,那么如何从sometag.classList中获取字符串?@user3633687:嗯,你没有。如果您执行
x=element.classList
操作,您将得到一个对象(特别是
DOMTokenList
);如果您执行了
x=String(element.classList)
,那么您将得到一个字符串。为了调用对象上的
toString
,需要说“我想要这个的原语形式”(或者特别是“我想要这个的字符串形式”)<代码>日志不能做到这一点,至少在大多数现代浏览器上不能做到。例如,对于使用Chrome的我来说,
console.log(document.body.classList)
提供了各种各样的东西,而不仅仅是一个简单的字符串。太棒了!这就是我问题的答案!