zoukankan      html  css  js  c++  java
  • js原型链解析

    1、字面对象【实例】和new的对象实例没有prototype, 只有__proto__。

        function fn () {}
    
        let obj1 = {
          value: 1,
        }
    
        let obj2 = new fn();
    
        console.log(obj1.prototype, obj2,prototype);  //Uncaught ReferenceError: prototype is not defined

    2、类型上有prototype, 【类实例】上的__proto__指向的就是类型上的prototype。

        class myObject {
    
        }
    
        let obj = new myObject();
    
        console.log(obj.__proto__ === myObject.prototype);  

     3、创建类实例后,再在【类型】上的prototype添加属性或方法, 对类实例产生影响。不是对prototype重新赋值!!!

        // function myObject() {
        // }  也可以
    
        class myObject {};
    
        let obj = new myObject();
    
        myObject.prototype.value = 123;
        myObject.prototype.outValue = function () {
          console.log(this.value);
        }
    
        obj.outValue(); 

    4、对【类型】的prototype重新赋值的差别。

        function myObject() {
        }
    
        // class myObject {};
    
        //----------------------------
        // myObject有上面两种声明(定义)方式,效果是不一样的!   
        //----------------------------
    
        let obj = new myObject();
    
        myObject.prototype.value = 123;
        myObject.prototype.outValue = function () {
          console.log(this.value);
        }
    
        myObject.prototype = {
          constructor: myObject,
          value: 666,
          logValue: function() {
            console.log(this.value);
          }
        }
    
        let obj2 = new myObject();
    
        try {
          obj2.outValue();
        }catch {
          console.log('myObject只能是function方式声明才可以,不然报错。');
        }
    
        try {
          obj2.logValue();
        }catch {
          console.log('myObject只能是class方式声明才可以,不然报错。');     
        }

    5、__proto__与prototype的关系。 prototype里包含一个__proto__指针, 这个指针指向的是【类型】上的prototype。

    这个指向过程是在constructor构造函数中完成的。所以生产【类型】的【实例】后,如果对prototype【整体】重新赋值,有可能会造成混乱。

    这种混乱是 【4】代码中展示的那样, 由于类型声明用class 和 function 定义的不同,然后对prototpye【整体赋值】还是有差别的。

  • 相关阅读:
    插入排序(二)
    选择排序(一)
    (转)示例化讲解RIP路由更新机制
    Css元素居中设置
    (转)盒子概念和DiV布局
    (转)浅析CSS——元素重叠及position定位的z-index顺序
    (转)Java中的static关键字解析
    (转)字符串循环移位
    linux把某个文件拷贝到不同的目录下面
    linux中查找文件并合并文件
  • 原文地址:https://www.cnblogs.com/Jiaojiawang/p/14044333.html
Copyright © 2011-2022 走看看