继承、闭包、cookie和session

来源:互联网 发布:网络大电影收入计算 编辑:程序博客网 时间:2024/06/07 18:32

一、对象、prototype属性、继承
1、创建了一个新的对象之后,就会创建一个prototype属性
2、这个属性指向函数的原型对象
3、对象会自动获得一个constructor属性
4、Constructor
5、原型模式:每个函数都有一个prototype属性
6、原型链:利用原型让一个引用类型继承另一个类型的属性和方法。是实现继承的主要方法。在子级中实例化父级的对象(SubType.prototype = new SuperType())。
a)缺点:所有的实例都共享父级的属性,修改其中一个就会修改全部
b)在创建子对象实例的时候,不能像超类型构造函数传递参数。
7、继承:很少会单独使用原型链。于是出现了一下几类:
a)借用构造函数(有时候也叫伪造对象或者经典继承):在子类构造函数的内部调用超类型的构造函数。
b)组合继承(也叫伪经典继承、最常用的继承方式):将原型链和借用构造函数技术组合到一块。使用原型链实现对原型属性和方法的继承;而通过借用构造函数实现对实例属性的继承。
优点:结合原型链和借用构造函数的优势:1、借用构造函数中传入了参数,所以构造的是不同的超类型对象,在子对象中互不影响。2、原型链,可以使用超类型的属性和方法。
c)原型式继承
d)寄生式继承
e)寄生组合式继承


二、作用域链
在创建函数时,会创建一个预先包含全局变量的作用域链,这个作用域链被保存在内部的scope属性中;当调用函数时,会为函数创建一个执行环境,然后通过复制函数的scope属性中对象构建起执行环境的作用域链。此后,活动对象被创建并被推入执行环境作用域链的前端。于是作用域链中包含两个变量对象:本地活动对象和全局变量对象。


三、闭包
有权访问另一个函数作用域中的变量的函数。创建闭包的常见方式:在一个函数内部创建另一个函数。在外部函数执行完毕后,其活动对象不会被销毁,因为匿名函数的作用域链仍在引用这个活动对象。也就是说:外部函数作用域链会被销毁,但它的活动对象不会被销毁,直到内部函数被销毁后,外部函数的活动对象才会被销毁。
注意的问题:
1、闭包与变量。(for var i=0;i<length;i++)这个再包含一层内部函数的时候,内部访问i只会访问到最后一个i,这个经典的地方可以用闭包来解释。
2、This对象。内部函数的this问题,内部函数用到this、arguments时,只会搜索到活动对象为止,因此永远不可能直接访问外部函数的这两个变量。不过,把外部作用域中的this对象保存在一个闭包可以访问到的变量中,就可以让闭包访问对象了。
var name = ‘the windows’;
Var object = {
name:”my object”,
getNameFunc:function(){
Return function(){this.name}
}
}
Alert(object.getNameFunc()()) //the windows


var name = ‘the windows’;
Var object = {
name:”my object”,
getNameFunc:function(){
Var that = this;
Return function(){that.name}
}
}
Alert(object.getNameFunc()()) //my object




四、cookie和session
并不是所有的网页请求都会有cookie和session,对于用户来说,只有与用户个人信息相关的才会有cookie和session来存储数据。访问其他的公共资源不需要cookie和session的。