函数的名字只是一个指向函数的指针, 所以即使在不同的执行环境, 即不同对象调用这个函数, 这个函数指向的仍然是同一个函数. 函数中有两个特殊的内部属性: arguments 和 this.
arguments 主要是用来保存函数参数, arguments 中的 callee 属性主要是用来指向拥有当前 arguments 的函数 (理解 JavaScript 参数中的 arguments 对象).
四种调用函数的方式: 函数调用模式, 方法调用模式, 构造器模式, apply\call 模式.
1, 直接调用函数的方式, this 指向的全局对象 Windows.
实例 1:
函数声明
- function add(a,b) {
- return a+b;
- }
- console.log(add(1,2));
实例 2:
函数表达式
- var add=function (a,b) {
- return a+b;
- }
- console.log(add(1,2));
2, 函数作为对象的方法调用, this 指向当前的对象.
实例 1:
- var o = {
- prop: 21,
- f:function() {
- return this.prop;
- }
- };
- console.log(o.f());
实例 2
- var o = {
- prop: 21,
- };
- function f() {
- return this.prop;
- }
- o.f = f;
- console.log(o.f());//21
3, 通过 new 调用构造器的方式, this 指向当前构造函数的原型.
实例 1:
返回 this 对象给 o
- function MyClass() {
- this.a = 21;
- }
- var o = new MyClass();
- console.log(o.a);//21
实例 2:
如果有 return, 则返回 return 的结果, 如果没有就会返回 this.
- function MyClass() {
- this.a = 21;
- return {a:22};
- }
- var o = new MyClass();
- console.log(o.a);//22
4, 通过 apply 或 call 的方式, 这两个的第一参数即 this, 当第一个参数为 null,this 指向 Windows; 当第一个参数为一个对象, this 就指向当前这个对象.
来源: http://www.css88.com/qa/javascript/11039.html