默认console.log输出对象时,总是显示[Object,Object]的原因是什么呢?
当我们直接在页面打印一个对象时,事实上是输出对象的toString()方法的返回值
通过hasOwnProperty方法检查toString方法是否归属于对象
function Person(name,age){
this.name = name;
this.age = age;
}
var per1 = new Person("Sam",18);
console.log(per1.hasOwnProperty("toString"));
浏览器返回值为false,在其隐藏的原型对象内查找
console.log(per1.proto.hasOwnProperty("toString"));
浏览器返回值为false,说明toString方法不是对象隐藏的原型对象中的,对原型对象的原型对象进行查找
console.log(per1.proto.proto.hasOwnProperty("toString"));
浏览器返回值为true,说明toString方法是原型对象的原型对象的方法,那么如何对其返回值进行自定义呢?
per1.toString = function(){
return "Person[ name = " + this.name + "age = " + this.age + "]"
}
但是这样的话,如果新定义一个per2实例,打印这个对象,返回值仍然为[Object,Object],如果希望所有Person类的实例打印的结果都为以上自定义方式,可以在Person类中进行自定义
Person.prototype.toString = function(){
return "Person[ name = " + this.name + "age = " + this.age + "]"
}
以上即可实现任意实例Person类的对象,保持打印的结果为自定义的结果