函数相关:toString方法

179 阅读1分钟

默认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类的对象,保持打印的结果为自定义的结果