美文网首页
JavaScript笔记 (原型链闭包)

JavaScript笔记 (原型链闭包)

作者: 李忽然 | 来源:发表于2019-04-02 22:41 被阅读0次

    JavaScript笔记

    1.JS在对象实例化过程中会执行构造函数

    2.三个常用关键字:

    1.constructor 返回对象构造器

    2.typeof 返回数据类型

    3.instanceof 判断对象是否是某个类的实例

    3.对象传递是引用 名字存在堆中(小),属性方法存在栈中(大)

    4.function test()

    {this.i=10;}

    var i=15;   //winddow.i=15;

    test();   //window.i=10;

    alert(this.i);  //aler(window.i)  输出结果为 i=10

    5.将对象作为参数,将对象作为返回值,都是地址的传递

    6.用for in循环对象的属性

    for(var i in b)

    {

        document.write(i+':'+b[i]+'<br>');

    }

    7.文本下标的数组不计入length

    8.delete清除一个对象的属性

    9.json是一个属性/属性名 成对出现的对象  是object类的实例

    定义一个数组保存多个人信息 var p=[{},{},{}];

    10.面向对象时对象实例尽量定义为全局变量,对象方法中有的变量可以定义为对象属性,可以使用数组来存取同一物体的不同属性

    11.作用域链和原型链

    12.取消事件冒泡用oEvent.cancelBubble=true;

    13.IE8一下取消默认事件用 oEvent.returnValue=false;

         其他的用oEvent.preventDefault(); 

         统一处理:return false;

    14.setTimerout()执行一次   setInterval()反复执行

    15.hasOwnProperty('属性') 返回值是布尔,判断对象是否存在某个属性

    16.全局变量会一直保留,局部变量运行完后会被回收

    17.

        在构造器中,this.属性相当于公有属性,外部可以访问

        var定义的相当于私有属性,但是执行完对象实例化后,var定义的会被回收,所以要用闭包

       于是用this.方法调用var 定义的属性,则实现了闭包,var定义的属性不会被回收

       如果该属性只有get方法,说明该属性只读

       如果该属性只有set方法,说明该属性只写

    18.闭包

        function a()

            {

                var i=10;

                this.show=function()

                {

                    alert(i++)

                };

            }

          var b=new a();

          b.show();    //11

          b.show();    //12

          b.show();     //13

          b.show();

    19.模拟继承的方法:

    1.扩展object  

          Object.prototype.ext=function(parObject)

      {

          for(var i in parObject)

          {

          this[i]=parObject[i];

           }

       };

    2.用call 和apply 

       function b()

       {  

          a.call(this);

          this.say=function()

          {

              alert(this.x+this.y);

          }

       }

    3.原型继承

    子类.prototype=new 父类();

    20.静态方法和实例方法

    静态方法:类可以直接调用

    实例方法:方法定义在原型上,需要创建实例再调用

    function A()

    {

    A.sayMeS=function(){

    console.log("Hello World S!");

    }

    A.sayMeS();//输出Hello World S!

    实例方法:

    function A()

    {

    A.prototype.sayMeE=function(){

    console.log("Hello World E!");

    }

    var a=new A();

    a.sayMeE();//输出Hello World E!

    二者的区别:

    从定义上,实例方法要用到function这个对象中的prototype属性来定义,静态方法通过A.直接定义;从方法调用上,静态方法可以直接通过A.来调用,实例方法要通过先定义一个引用变量,指向构造函数定义的新对象。 

    --------------------------------------------------------------------------------------

    js遗漏笔记

    S中for each只能遍历数组,不能遍历伪数组

    foreach(function(value,index){})

    ;

    JS中map也只能遍历数组,不能便利伪数组

    arr.map(function(value,index,array){});

    任何对象都有属性,只有dom对象才有属性节点

    setAttribute设置属性节点的值

    getAttrbute获取属性节点的值

    改变父元素的透明度但是不改子元素的

    用RGB(0,0,0,0.4)

    一个元素指定多个 class 时,class 的优先级与指定顺序无关,而是和 class 的定义顺序有关。

    将伪数组转换成真数组

    如果slice()不传参数,会将数组中的元素放到一个新的数组中返回

    var arr=[].slice.call(obj);

    将真数组转换成伪数组(将自定义伪数组转换成伪数组还是真数组,都要先利用slice 转换成真数组)

    [].push.apply(obj,arr); 

    document.querySelectorAll(selector)系统根据传入的选择器自动选择

    extend 将子类的方法复制到原型里这样可以通过原型调用

    for(var key in obj)

            {

                this[key]=obj[key]

            }

    获得dom元素的属性节点的值 getAttribute  设置:setAttribute

    each里面return true相当于congtinue  false相当于break

    一般同addEventListener添加事件监听,IE8及一下用attachEvent 同时第一个参数事件要手动加上on

    低版本浏览器同一个元素添加的相同事件执行顺序与添加顺序相反,可以用一个对象里面存存着数组来实现顺序调用

    例如:catch{click:[test(),test2()],

                 mouseover:[test3(),test4()]}

    原生JS中cloneNode是浅复制,不能复制事件

    window.loacation.hash=2 可以种hash值  在url后面加上一个#2

    得到hash: console.log(window.location.hash.substring())   //  2

    相关文章

      网友评论

          本文标题:JavaScript笔记 (原型链闭包)

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