《javascript设计模式与开放实践》学习(一)javascript实现多态2

 1、this的使用

1)作为对象的方法调用,this指的对象本身

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

 2)作为普通函数调用,this指的是window对象

window.name='globalName';

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

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

 这里是变量getName引用myObject.getName方法。如果是myObject.getName(),会输出seven,这里是属于对象的属性调用。

3)构造器调用,this指的是构造器返回的对象

 

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

var obj=new MyClass();
alert(obj.name);

 

如果显式的返回Object对象,最终返回这个对象,而不是this

 

var MyClass=function(){
        this.name='seven';
        return {
            name:'anne'
        }
    };

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

 

 

 

如果返回的是非对象类型,如字符串,依然会输出seven.

4)Function.prototype.call或Function.prototype.apply调用

都用于用于指定函数内this对象的指向.

 

call与apply区别:

a)apply的第一个参数指定this对象的指向,第二个参数为一个带下标的集合,可以是数组也可以是类数组。

 

var func=function(a,b,c){
   alert([a,b,c]);//输出[1,2,3]
};
func.applay(null,[1,2,3]); //null指向默认的宿主对象,浏览器中为window.

 

 

 

b)call的一个参数和apply一样指定this对象,后面多个参数。

 

var func=function(a,b,c){
   alert([a,b,c]);//输出[1,2,3]
};
func.call(null,1,2,3); //null指向默认的宿主对象,浏览器中为window.

 

 

 

 

解决上面用普通函数调用this丢失的问题

window.name='globalName';

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

    var getName=myObject.getName;
    console.log(getName.apply(myObject)); //输出seven

 

转载于:https://www.cnblogs.com/GallopingSnail/p/5869315.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值