码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2016-09-13 18:56:08      阅读:167      评论:0      收藏:0      [点我收藏+]

标签:

 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

 

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

标签:

原文地址:http://www.cnblogs.com/GallopingSnail/p/5869315.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!