zoukankan      html  css  js  c++  java
  • 2.9 原型链综合复习参考

    1.div,a,window,document 浏览器输出看一下内置的方法有哪些

      function Fn () {

        this.x = 100;

        this.y = 200;

        // 在类的函数体中写的this.xxx = xxx都是给当前类的实例增加私有的属性或者方法

      }

      // 在类的原型上写的,都是给当前类的实例或者当前类,增加的公有的属性和方法

      Fn.prototype.getX = function() {

        console.log(this.x)

      }

      Fn.prototype.getY = function () {

        console.log(this.y)

      }

      var f = new Fn;

      var f2 = new Fn;

    2.所有的函数数据类型(普通函数和类)都天生自带一个属性:prototype,它存储的值是一个对象数据类型的值,浏览器默认为其开辟一个堆内存

       在浏览器给prototype默认开辟的堆内存上有一个默认的属性:constructor,指向当前类本身

     每一个对象数据类型(普通对象,数组,正则,实例,prototype)都天生自带一个属性,__proto__,指向当前实例所属类的原型

       function Fn () {
    
        this.x = 100;
    
        this.getX = function () {
    
          console.log(this.x)
    
        }
    
      }
    
      Fn.prototype.getX = function() {
    
        console.log(this.x)
    
      }
    
      Fn.prototype.setX = function (n) {
    
        this.x = n
    
      }
    
      var f1 = new Fn;

      f1.getX() // this->f1, console.log(f1.x) 100

      f1.__proto__.getX() // this->f1.__proto__,console.log(f1.__proto__.x) undefined

      Fn.prototype.setX(300) // this ->Fn.prototype, Fn.prototype.x= 300

      f1.getX() // 100

      f1.__proto__.getX() // 300

      f1.setX(); //this -> f1,f1.x = 500 把私有的修改为500

      f1.y = 300 // 给f1本身增加一个私有属性和f2没有关系

      f1.__proto__.y = 1000 // 在原型上增加一个y = 1000,f2也可以获取到这个值了

    3.在内置类的原型上扩展方法

      var ary= [12,23,34]

      ary.pop() // this->ary

      console.log(ary)

      ary.__proto__.pop() // this->ary.__proto__ ->Array.prototype

      console.log(ary)  // 删除不掉原因是js源码实现pop是this

        Array.prptotype.pop = function () {
    
        // this->ary
        this.length--;
      }

      基于内置类的原型扩展方法,我们需要注意的事项:我们自己编写的方法名最好加上特殊的前缀,防止把内置的方法覆盖掉  

      数组原型上增加数组去重

      Array.prototype.myUnique = function myUnique() {
        // this-》ary 当前要操作的数组     
    var obj = {}     for (var i = 0;i<this.length,i++) {       var cur = this[i]       if( obj[cur] === cur ) {         this[i] = this[this.length-1];         this.length--;         i--;         continue;       } else {         obj[cur] = cur       }     }     obj = null;     return this;   }
  • 相关阅读:
    mysql innodb存储引擎和myisam引擎
    php 5.5 xhprof for windows
    sqlserver 2012 部署详解
    Oracle ASM 常用命令
    oracle 基础知识(十四)----索引扫描
    oracle 基础知识(十三)----执行计划
    Oracle DG --检查
    Oracle broker--详解
    初识正则表达式
    python中闭包和装饰器的理解(关于python中闭包和装饰器解释最好的文章)
  • 原文地址:https://www.cnblogs.com/z-dl/p/8946157.html
Copyright © 2011-2022 走看看