js继承与闭包(笔记)

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

二、对象都是经过函数建立来的,好比var obj = new Object();typeof Object === 'function'; java

三、函数有隐藏属性prototype,对象有隐藏属性__proto__;闭包

     Func.prototype.constructor === Func;app

     func.__proto__ === Func.prototype;函数

四、对象的__proto__属性都指向建立它的函数的prototype;this

    Object.prototype.__proto === null;prototype

    Object.__proto__ === Function.prototype;code

    Function.__proto__ === Function.prototype;对象

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

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

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

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

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

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

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

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

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

     除了全局做用域,只有函数是能够建立一个独立的做用域;

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

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

九、1⃣️ 函数做为构造函数用,this指向new出来的对象;

     2⃣️ 函数做为对象的一个属性被调用,this指向该对象;

     3⃣️ 在call、apply中,this指向传入的对象;

     4⃣️ 全局调用普通函数,this指向window;

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

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

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

相关文章
相关标签/搜索