JavaScript设计模式与开发实践(一)

一、this

this的指向大致可以分为以下几种:

  • 作为对象的方法调用
  • 作为普通函数调用
  • 构造器调用
  • Function.prototype.call或Function.prototype.apply

1.作为对象调用

当函数作为对象的方法被调用,this指向该对象:

var obj = {
    a:1,
    getA:function(){
        alert(this === obj);  //输出true
        alert(this.a);    //输出1
    }
};

obj.getA();

当函数作为普通函数被调用,this指向全局对象(浏览器中指window对象)

window.name = 'globalName';

var getName = function(){
    return this.name;
}

console.log(getName());    //输出:globalName

或者

window.name = 'globalName';

var muObject = {
    name: 'sven',
    getName: function(){
        return this.name;
    }
};

var getName = myObject.getName;
console.log(getName());    //输出: globalName

构造器里的this指向返回的对象

var MyClass = function(){
    this.name = 'sven';
};

var obj = new MyClass();
alert(obj.name);    //输出:sven

call和apply动态的改变传入函数的this

var obj1 = {
    name: 'sven',
    getName:function(){
        return this.name;
    }
};

var obj2 = {
    name:'anne'
};

console.log(obj1.getName.call(obj2));    //输出: ‘anne’

 

posted @ 2018-02-04 21:47  取什么昵称呢  阅读(82)  评论(0编辑  收藏  举报