zoukankan      html  css  js  c++  java
  • 面向对象链式写法,原形添加,给内置对象添加的方法

      面向对象:

      1.构造函数里的属性怎么看? 

        谁前面有this谁就是属性

      案例:

      function Person(name,age){

        var num=12;         //他不是a的属性,只是私有作用域的私有变量

        this.name=name;

        this.age=age;

      }

      var a=new Person("张三",20)

      console.log(a)    

      2.如何查找面向对象中的this;

      1.构造函数里的this指向他的实例对象

      2.如果是方法中的this (要分三个步骤,依次执行)

      (找到this)  步骤一:在调用的时候,看方法前面的.(点)  this就指向谁;

      (替换this)    步骤二:将this换成你找到的那个结果

      (精确查找)  步骤三:用原型链查找模式及分析

      案例:

      function Person(){

        this.x=12;

        this.y=30;

        this.gets=function(){

          return this.x     //this不一定指向他的实例对象跟他的调用有关

        }

      }

      Person.prototype.sun=function(){

        return this.x   //第二步在这里翻译为(return a.__proto__.x)

      }

      var a=new Person;

      console.log(a.__proto__.gets())   (解析(按照步骤来一波):方法调用时,指向.前面的。及this指向为a.__proto__,第二步,将this换成a.__proto__,第三步利用原型链查找及分析:

                       this.x=>a.__proto__.x=>Person.prototype.x=>Person.prototype.x  得出结论:原型上没有这个方法       结果为:undefined不是一个函数)

      3.关于构造函数的返回值问题

        构造函数也是函数,每个函数都有返回值,构造函数返回的是this

      4.数组的方法

      1.push()  unshift()  pop()  shift()

      学习内置对象的方法(窍门):

        1.方法的功能

        2.方法的参数

        3.方法的返回值

      链式写法:

      案例:

      var arr=[12,45,36]

      var s=[89]

      console.log(arr.splice(1).concat(s).reverse())

      上面的这种可以通过.实现的多个方法,我们把它叫做链式写法;

      实现原理:每个方法使用完毕之后,不仅可以得到想要的结果,还需要把当前实例对象返回,才可以实现链式写法

      对象分析:以后我们在使用内置方法,出现内置方法报错;

      基本上会有两种情况(1.方法名写错;2.内置方法的归属出错)

      元素的父级

      div#div<HTMLDivElement<HTMLElement<Element<Node<EventTarget<Object

      获取的元素是document的属性;

      document.getElementsByName()  这个方法;

      <p name="p"></p>

      var a=document.getElementsByName("p")

      5.原型的批量添加和直接对象添加的区别

      案例:

      function Person(){

        this.name="张三"

      }

      Person.prototype.age=45;    //原型批量添加

      Person.prototype={              //直接对象添加

        age:56

      }

      如果是批量添加属性,没有改变原型的内存地址(浏览器开辟的)

      如果是以对象形式添加,就会更改原型的内存地址,浏览器开辟的就被销毁了

      6.怎样给内置对象添加方法;

        如果给内值类的的原型添加方法,使用对象形式Array.prototype={sun:function(){}}不起作用,因为浏览器会保护内置对象的原型内存地址不让人为修改,只能使用批量的形式添加方法Array.prototype.sun=function(){}   

      7.拷贝的几种方式

      1.var obj={}

         var obj2=obj    这种写法可以算是拷贝中的一种,但是严格意义上讲,只是将内存地址赋值给了obj2

      2.浅拷贝:就是将一个对象的属性一个一个复制到了另一个对象中去(主要针对第一层)

      案例:

      var obj={

        name:"张三",

        age:20

      }

      var obj2={}

      for(var key in obj){

        obj2[key]=obj[key]

        }

      console.log(obj2);

      3.深拷贝:如果对象中的属性值又是一个引用数据类型,浅拷贝也能实现,浅拷贝还是把引用数据类型的内存地址赋值给空的对象的一个属性,深拷贝将属性值也一个一个遍历赋值;

      案例:

      var obj={

        name:"张三",

        arr=[12,20,36]

        sex:{

          y:12,

          x:24

        }

      }

      var obj2={}

      function extend(oldobj,newobj){

        for(var key in oldobj){

          var item=oldobj[key]    //遍历每个属性的属性值

          if(item instanceof Array){

            newobj[key]=[]

            extend(item,newobj[key])

          }

          else if(item instanceof Object){

            new[key]={}

            extend(item,newobj[key])

          }

          else{

            newobj[key]=item

          }

        }

      extend(obj,obj2)

        

        

      

  • 相关阅读:
    LVS集群ipvsadm命令和调度算法(6)
    Keepalived实战(3)
    keepalived配置文件详解(2)
    HDFS对象存储:Ozone的块异步删除服务
    状态机在分布式系统中的应用
    状态机在分布式系统中的应用
    HDFS Ozone整体概述
    HDFS Ozone的Pipeline实现机制
    HDFS Ozone整体概述
    HDFS数据不均衡解决方案:基于剩余空间大小的均衡策略
  • 原文地址:https://www.cnblogs.com/shangjun6/p/10235237.html
Copyright © 2011-2022 走看看