函数作用域
每调用一次,函数就会创建一个新的函数作用域,他们之间的访问时互相独立的。
函数作用域可以访问到全局作用域的变量(全局变量),全局作用域无法访问到函数作用域的变量。
当在函数作用域中操作一个变量,它会先在自身变量作用域寻找,如果有就使用,如果没有向上一级寻找,上一级没有再向上一级访问,以此类推,直至在全局作用域没有访问到,就报错。
如果想跳过上述的变量搜寻准则,可以直接使用window.变量名访问全局作用域中的方法和变量
在函数作用域也有变量提前,是在函数代码执行之初就已经变量声明。
在函数内部,不使用var声明直接赋值的变量,会被当成是window的属性添加进去。
形参,相当于在函数作用域中声明。
(2)以方法的形式调用。this指的是调用方法的对象。
(3)以构造函数的形式调用。this指的是新创建的那个对象
(4)使用call和apply调用时,this为指定的那个对象。
(5)事件的响应函数中,响应函数给谁绑定,this就指的谁。
构造函数与普通的函数类似,为了区别于普通函数,将构造函数的首字母大写。
构造函数的创建流程
立即创建一个新对象
将新建对象设置为函数中的this
执行构造函数中的代码
将新建对象作为返回值返回
缺陷:每个新的对象都会在堆区开辟一片内存空间放置变量的属性和方法,每个对象的地址是不同的,所以不同的对象也是独立。事实上有一些属性和方法是可以共用的,这些重复的属性和方法浪费了内存空间。
原型创建对象
每创建一个函数,解析器会向函数对象添加一个属性 prototype(原型),这个属性对应于一个对象,称为原型对象。
用图:原型对象保存着 所有通过同一构造函数创建的实例的共有属性和方法。通过原型对象可以实现方法和属性的共用。
创建方法:
使用构造函数。Person.prototype.sayName = function(){}
使用已经实例化的对象。per1.__proto__.sayName = function(){}
使用方法:
当我们访问一个对象的属性或者方法时,会先在对象自身中寻找,如果有就使用,没有再去原型中寻找。
使用in可以检查对象中是否含有某个属性,但是如果对象自身中没有,而在原型对象中含有使用in也会返回true。如果想检测自身是够含有该属性,可使用对象的hasOwnProperty()方法检查自身是够含有该属性。
原型对象也是对象,也含有隐含的属性:原型对象
例如想修改对象原有的toString()方法,可以类额原型中编写自定义的toString方法。
Date对象
创建Date对象
var d = new Date();
直接用构造函数(缺省参数)创建的Date对象,指的当前代码执行的时间。如果在构造函数中传入“月份/日/年 时:分:秒”的字符串,d指的就是这个时间。
使用Date对象
d.getDate(); 获取几号
d.getDay(); 获取周几
d.getMonth(); 获取几月份(返回0-11月份)
d.getFullYear(); 获取年份
类似的还有getHours,getMinutes,getSeconds
d.detTime(); 获取当前日期的时间戳(毫秒数)。
注:时间戳是只从GMT 1970年1月1日,0时0分0秒到当前日期所花的毫秒数。计算机底层在保存时间时使用的都是时间戳。
time = Date.new(); 获取当前代码执行时的时间戳
附:
根据CSS选择器查询一个元素节点对象。document.querySelector(".box1 div");IE8中虽然没有getElementsByClassName,但是可以使用querySelector代替,但是它只能返回唯一的元素对象(第一个满足条件的元素对象),即使满足条件的元素节点对象有多个。
网友评论