JavaScript笔记 (原型链闭包)

2019-04-02  本文已影响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

上一篇下一篇

猜你喜欢

热点阅读