JavaScript笔记 (原型链闭包)

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

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 工厂模式类似于现实生活中的工厂可以产生大量相似的商品,去做同样的事情,实现同样的效果;这时候需要使用工厂模式。简单...
    舟渔行舟阅读 8,140评论 2 17
  • 单例模式 适用场景:可能会在场景中使用到对象,但只有一个实例,加载时并不主动创建,需要时才创建 最常见的单例模式,...
    Obeing阅读 2,321评论 1 10
  • 概要 64学时 3.5学分 章节安排 电子商务网站概况 HTML5+CSS3 JavaScript Node 电子...
    阿啊阿吖丁阅读 9,880评论 0 3
  • 第3章 基本概念 3.1 语法 3.2 关键字和保留字 3.3 变量 3.4 数据类型 5种简单数据类型:Unde...
    RickCole阅读 5,543评论 0 21
  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5? 答:HTML5是最新的HTML标准。 注意:讲述HT...
    kismetajun阅读 28,886评论 1 45

友情链接更多精彩内容