函数
this
this的值取决于调用的模式。在JavaScript中共有4种调用模式
- 方法调用模式
- 函数调用模式
- 构造器调用模式
- apply调用模式
方法调用模式
当一个函数保存为对象的一个属性时,我们称他为一个方法。当方法被调用时,this绑定到该对象
函数调用模式
以函数调用模式调用时this绑定到全局对象
构造器调用模式
this会绑定到新对象上
Apply调用模式
apply接受两个参数,要绑定的this值和参数数组。
参数
JS不关心函数有多少参数,参数通过类似Array传递,即可以通过arguments[0]来访问第一个参数
function doAdd()
{
if(arguments.length==1)
{
// do something
}
else
{
// do something
}
}
因此JS函数无法重载
函数传递
JS函数传递都是按值传递。传递基本类型值,被传递值会复制一个局部变量。传递引用类型时,会把内存地址复制给局部变量
每个环境都可以向上搜索作用域链,但不能向下搜索。可以使用with语句拓展作用域链
function buildurl()
{
var qs='xxx'
with(location){
var url=href+qs
}
return url
}
作用域
var声明变量时,会自动添加到最接近环境中。初始化没有用var声明会添加到全局变量
面向对象程序设计
对象
JS将对象定义为无序属性的集合,其属性可以包含基本值,对象或函数。
JS中有数据属性,访问器属性两种属性
数据属性
- [Configurable]
- [Enumerable]
- [Writable]
- [Value]
修改默认属性必须使用Object.defineProperty()
一旦将属性定义为不可配置,就不可以再修改为可配置
访问器属性
- [Configurable]
- [Enumerable]
- [[Get]]
- [[Set]]
使用Object.defineProperties()一次定义多个属性