js继承与闭包(笔记)

1、一切引用类型都是对象,对象是属性的集合;typeof null === 'object'(例外);

2、对象都是通过函数创建来的,比如var obj = new Object();typeof Object === 'function'; 

3、函数有隐藏属性prototype,对象有隐藏属性__proto__;

     Func.prototype.constructor === Func;

     func.__proto__ === Func.prototype;

4、对象的__proto__属性都指向创建它的函数的prototype;

    Object.prototype.__proto === null;

    Object.__proto__ === Function.prototype;

    Function.__proto__ === Function.prototype;

    Function.prototype.__proto === Object.prototpe;

5、instanceof 其实是一种继承关系,A instanceof B(沿着A的__proto__找,同时沿着B的prototype找,如果最终能找到同一个饮用,就true);

6、访问一个对象的属性,如果自身没有,则沿着__proto__向上找,这就是原型链;

7、var obj = {},arr = [];

     obj.toString === '[object Object]';

     arr.toString === '';  说明Array.prototype.toString方法被改了;

8、处于活动状态的执行上下文只有一个;

     作用域是一个抽象的概念,其中没有变量,要通过作用域对应的执行上下文来获取变量的值,且不同的调用会产生不同的上下文;

     函数是在定义时就确定了函数体内部自由变量的作用域;

     除了全局作用域,只有函数是可以创建一个独立的作用域;

     要取一个变量的值,要到创建它的函数的那个作用域中取值,这就是所谓的静态作用域;

     在A作用域中使用的变量a,却没在A中声明,则称a是自由变量;

9、this指向

  • 函数作为构造函数用,this指向new出来的对象;
  • 函数作为对象的一个属性被调用,this指向该对象;
  • 在call、apply中,this指向传入的对象;
  • 全局调用普通函数,this指向window;

10、闭包特性:函数嵌套函数;函数内部可引用外部变量;变量不会被回收。

      闭包是指有权访问另一个函数作用域中的变量的函数,闭包缺点是容易内存泄露。

       垃圾回收原理:在js中,如果一个对象不再被引用,那么这个对象就会被GC回收; 如果两个对象互相引用,而不再被第3者所引用,那么这两个互相引用的对象也会被回收。

posted @ 2017-04-23 10:48  we are young  阅读(1382)  评论(0编辑  收藏  举报