JavaScript中重写对象(构造函数)的toString()函数

实现构造函数中重写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版权协议,转载请附上原文出处链接和本声明。