实现构造函数中重写toString() 的方法:
首先,对象的原始的toString()函数是位于该对象的原型的原型对象中的,我们只要在该对象的原型中新建一个toString()函数就可覆盖对象的原始的toString()函数。
对于如何判断toString()函数是位于一个对象的原型的原型对象中,可以使用以下方法判断(以Person对象举例):
var p = new Person();
console.log(p.__proto__.__proto__.hasOwnProperty("toString"));//返回值为true
以下是重写toString()函数的源码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script>
function Person(name, age, gender){
this.name = name;
this.age = age;
this.gender = gender;
}
Person.prototype.toString = function(){
return "Person[name="+this.name+",age="+this.age+",gender="+this.gender+"]";
}
//创建一个Person实例
var p1 = new Person("曹阿瞒",77,"男");
var p2 = new Person("刘玄德",78,"男");
//这个重写的toString只对p1对象起作用,对p2不起作用
// p1.toString = function(){
// return "Person[name="+this.name+",age="+this.age+",gender="+this.gender+"]";
// }
//当我们直接在页面中打印一个对象时,实际上是输出的对象toString()方法的返回值
var result = p1.toString();
var result2 = p2.toString();
console.log("result = "+result);
console.log("result2 = "+result2);
//系统的toString()位于原型的原型对象中,
//故我们可以在Person的原型对相中创建toString()函数,此后系统再次调用toString时,就会优先使用原型对象中的toString,而不是原型的原型对象中的toString
// console.log(p1.__proto__.__proto__.hasOwnProperty("toString"));//返回true
</script>
</head>
<body>
</body>
</html>
运行结果:
版权声明:本文为m0_47015897原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。