js面向对象(1)

1.什么是原型链

当一个对象在查找一个属性的时,
自身没有,就会根据__proto__ 向它的原型进行查找,如果都没有,则向它的原型的原型继续查找,直到查到
Object.prototype._proto_为 nul,这样也就形成了原型链。

2.什么是作用域链

变量起作用的范围,就是变量的作用域
注意:在JS当中,有且只有函数可以创建作用域!!

在寻找变量的时候,在当前作用域中进行查找,如果找到了就使用,如果没有找到,就继续向上一级作用域中进
行查找,如果找到了就使用,如果还没有找到,就继续沿着作用域链向上查找,直到全局作用域

3.什么是闭包

闭包是一个封闭的隔离的空间,在js中表现为函数所构成的外部无法访问的区域,当函数被外部引用时,就创建了该函数的闭包 
    闭包的实质是一个函数,是一个用于返回局部变量值的函数,因为在全局中,受JavaScript链式作
用域结构的影响,父级变量中无法访问到子级的变量值,为了解决这个问题,才使用闭包这个概念。
闭包的特性:
①.封闭性:外界无法访问闭包内部的数据,如果在闭包内声明变量,外界是无法访问的,除非闭包主动向外界提供访问接口;
②.持久性:一般的函数,调用完毕之后,系统自动注销函数,而对于闭包来说,在外部函数被调用之后,闭包结构依然保存在
系统中,闭包中的数据依然存在,从而实现对数据的持久使用。
优点:
① 减少全局变量。
② 减少传递函数的参数量
③ 封装;
   缺点:
 使用闭包会占有内存资源,过多的使用闭包会导致内存泄露等.
//获得闭包中多个数据
 function foo(){
     var num1 = 1;
     var num2 = 2;
     return {
        get_num1: function(){
            return num1;
        },
        get_num2:function(){
            return num2;
        },
        set_num1:function(value){
            num1 = value;
        }
     }
  }
var p = foo();
console.log(p.get_num1())  --1
console.log(p.get_num2())  --2
p.set_num1(5)
console.log(p.get_num1())  --5
//沙箱模式
沙箱模式就是立即执行函数表达式也叫自调用匿名函数
特点是没有函数名,在页面加载完成时就执行一次,且内部的变量不会被外界访问到,正好符合沙箱模式
 1.   //jq写法
    (function () {
        var Cat = {
            eat:function () {
                console.log("吃");
            }
        }
        window.cat = window.$ = Cat;
    })()

    window.cat.eat();//吃
    window.$.eat();//吃
    cat.eat();//吃
    $.eat();//吃

2.


3.闭包来缓存
对象无法判断数据存储的顺序,需要用一个数组来帮助完成容量限制的操作
数组中存储数据的键,可以根据键的数量来判断容量是否超了   
在超容之后,可以通过键的顺序知道哪个数据是最先加进来的,然后将其删除
     function createCache(){
                var cache = {};
                var keys = [];
                return{
                    setValue:function(key,value){
                         cache[key]  = value;
                          keys.push(key);
                   判断所存数据的个数是否超过了限制
                           if (keys.length>3) {
                          //如果超过了,就把最前面的数据key删掉(数组和对象中都要删除)
                            var key =keys.shift();                           
                            delete cache[key];
                          }
                        
                    },
                    getValue:function(key){
                         return cache[key] ;
                    }
                }
           }
               
           var cache =  createCache();
           cache.setValue("帅哥","王建军")
           cache.setValue("帅哥1","王建军")
           cache.setValue("帅哥2","王建军")
           cache.setValue("帅哥3","王建军")
           console.log( cache.getValue("帅哥"))

你可能感兴趣的:(js面向对象(1))