61-原型链

作者: 仰望_IT | 来源:发表于2019-04-25 13:44 被阅读1次
    • 对象中proto组成的链条我们称之为原型链
      原型链
    • 注意点:
      • 注意点1: 对象在查找属性和方法的时候, 会先在当前对象查找, 如果有就用自己的

            function Person(myName, myAge) {
                this.name = myName;
                this.age = myAge;
                // 构造函数自己有的时候就用自己的属性和方法
                this.currentType = "构造函数中的type";
                this.say = function () {
                     console.log("构造函数中的say");
                }
            }
        
            Person.prototype = {
                // 注意点: 为了不破坏原有的关系, 在给prototype赋值的时候
                // 需要在自定义的对象中手动的添加constructor属性, 手动的指定需要指向谁
                constructor: Person,
                currentType: "人",
                say: function () {
                     console.log("hello world");
                }
            }
            let obj1 = new Person("lnj", 34);
        
            obj1.say();  // 构造函数中的say
            console.log(obj1.currentType);  // 构造函数中的type
        

    • 注意点2: 如果当前对象中找不到想要的, 会依次去上一级原型对象中查找

          function Person(myName, myAge) {
              this.name = myName;
              this.age = myAge;
              // 构造函数自己没有的时候就去上一级原型对象中查找
          }
      
          Person.prototype = {
              // 注意点: 为了不破坏原有的关系, 在给prototype赋值的时候
              // 需要在自定义的对象中手动的添加constructor属性, 手动的指定需要指向谁
              constructor: Person,
              currentType: "人",
              say: function () {
                   console.log("hello world");
              }
          }
          let obj1 = new Person("lnj", 34);
      
          obj1.say();  // hello world
          console.log(obj1.currentType);  // 人
      

    • 注意点3: 如果找到Object原型对象都没有找到, 就会报错

          function Person(myName, myAge) {
              this.name = myName;
              this.age = myAge;
          }
      
          Person.prototype = {
              // 注意点: 为了不破坏原有的关系, 在给prototype赋值的时候
              // 需要在自定义的对象中手动的添加constructor属性, 手动的指定需要指向谁
              // constructor: Person,
              上一级也找不到的时候就会去上上级查找, 如果一直找到Object都没有找到就会报错
              // currentType: "人",
              // say: function () {
                   // console.log("hello world");
              // }
          }
          let obj1 = new Person("lnj", 34);
      
          obj1.say();  // 报错
          console.log(obj1.currentType);  // 报错
      

    相关文章

      网友评论

        本文标题:61-原型链

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