JavaScript原型链浅谈

作者: 费莱姆 | 来源:发表于2018-04-27 21:09 被阅读17次

    1.什么是原型链?

    每个构造函数都有原型对象;每个对象都会有构造函数;每个构造函数的原型都是一个对象;那么这个原型对象也会有构造函数;那么这个原型对象的构造函数也会有原型对象;这样就会形成一个链式的结构,称为原型链。

    2.原型链结构的基本形式

     function Person(name){
                this.name = name;
            }
    
            var p = new Person();
    
            //p ---> Person.prototype --->Object.prototype---->null
    

    3.属性搜索原则:

    a.当访问一个对象的成员的时候,会现在自身找有没有,如果找到直接使用,
    b.如果没有找到,则去当前对象的原型对象中去查找,如果找到了直接使用,
    c.如果没有找到,继续找原型对象的原型对象,如果找到了,直接使用
    d.如果没有找到,则继续向上查找,直到Object.prototype,如果还是没有,就报错

    4.原型继承概念

    通过修改原型链结构实现的继承,就叫做原型继承。

    5.复杂的原型链

    //动物--->人---->老师---->坏老师
    
            function Animal(){
                this.gender = "male";
            }
    
            Human.prototype = new Animal();
            Human.prototype.constructor = Human;
            function Human(){
                this.actionWay = "走路";
            }
    
            Teacher.prototype = new Human();
            Teacher.prototype.constructor = Teacher;
            function Teacher(){
                this.skill = "教书";
            }
    
            BadTeacher.prototype = new Teacher();
            BadTeacher.prototype.constructor = BadTeacher;
            function BadTeacher(){
                this.name = "吕超";
            }
    
            var t = new BadTeacher();
            console.log(t);
    

    6.Object.prototype的成员

    ①.constructor:
    原型对象内的一个属性,指向该原型对象相关联的构造函数。
    ②.hasOwnProperty:
    一个方法,用来判断对象本身(不包含原型)是否拥有某个属性。

    function Person(){
              this.name = "王九"
        }
          Person.prototype.name = "张三";
    
           var p = new Person();
          console.log(p.name);
    
           console.log(p.hasOwnProperty("__proto__"));
    

    ③.propertyIsEnumerable:
    a. 判断属性是否属于对象本身
    b. 判断属性是否可以被遍历

     console.log(p.propertyIsEnumerable("name"));
    

    ④.将对象转换成字符串

    var o = {};
           console.log(o.toString());
           console.log(o.toLocaleString());
    
          var now = new Date();
          console.log(now.toString());
          console.log(now.toLocaleString());
    

    ⑤.valueOf:
    获取当前对象的值

           function Person(){
    
               }
           var p = new Person();
    
            //在对象参与运算的时候
            //1.默认的会先去调用对象的valueOf方法,
            //2.如果valueOf获取到的值,无法进行运算 ,就去去调用p的toString方法  最终做的就是字符串拼接的工作
            console.log( 1 + p);
    

    ⑥ _proto_:
    a.原型对象对象中的属性
    b.可以使用 对象._proto_去访问原型对象

    相关文章

      网友评论

        本文标题:JavaScript原型链浅谈

        本文链接:https://www.haomeiwen.com/subject/xwwilftx.html