js prototype Function Closure Understand

来源:互联网 发布:马尔科夫概率转移矩阵 编辑:程序博客网 时间:2024/06/08 01:11

1 JS 对象可以通过prototype来扩展自己,任何对象都可以作为另一个对象的原形,Object对象是顶端对象,其原形对象没有原形,其他的对象都具有原形。

2 原型链指的是js查找变量的一种顺序,他会沿着对象出发,沿着当前对象的原形一层一层的搜索,直到找到该变量。若到达Object对象后,还是没有找到,这返回undefined错误。

3 o.prototype = {}; o.var1=1; 等都是对o对象的扩展。for in 等遍历一个对象时,会遍历整个原形链。hasOwnProperty 函数是唯一可以返回当前对象的属性而不遍历原型链的。

4 this 场景分析 

a 若直接调用一个函数,则this代表的是全局的对象(验证了函数的作用域不在执行环境,而在定义环境)

b 若 有一个对象调用一个函数,则this代表调用该函数的对象。

c 和New 一起调用的函数通常称为构造函数,此时this代表的是创建的对象,该对象的原形为该函数的原形

d 显示的指定this代表的对象 func.apply(obj, [arg1, arg2, arg3....]) , func.call(obj, arg1, arg2, arg3....);


5 函数

js 不支持块作用域,函数是js 唯一的作用域区分点。函数作用域既可以访问外部的变量,也可以反问内部的变量。可以在函数的内部定义函数,通常称为闭包。闭包函数若引用了外部包裹函数的变量而不释放,这将导致外部函数调用结束后,被闭包函数引用的变量不会被注销,可以通过执行闭包函数继续访问到。

闭包封装器 指的是将函数定义在一个闭包中并立即执行,能够起到隔离的作用,避免命名的冲突。(function(){}()) 或 (fucntion(){})()


6 一些误区

若对象的原形是一个实例化的对象,则该原形具有共享性,会被该对象的所有的实例所共享。



0 0
原创粉丝点击