关于JavaScript的几点记录

258 阅读2分钟

函数

this

this的值取决于调用的模式。在JavaScript中共有4种调用模式

  1. 方法调用模式
  2. 函数调用模式
  3. 构造器调用模式
  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中有数据属性访问器属性两种属性

数据属性

  1. [Configurable]
  2. [Enumerable]
  3. [Writable]
  4. [Value]

修改默认属性必须使用Object.defineProperty()

一旦将属性定义为不可配置,就不可以再修改为可配置

访问器属性

  1. [Configurable]
  2. [Enumerable]
  3. [[Get]]
  4. [[Set]]

使用Object.defineProperties()一次定义多个属性