• 《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
  • 相关阅读:
    分布式计算原理
    消息的有序性
    CAP再解释
    数据建模
    领导层级的跨越
    如何上云|什么是多机房多活架构
    mysql导出导入数据
    Qt 串口 封装好的类 直接使用
    C++ 在类的定义时初始化非静态变量
    Qt error C3646: 未知重写说明符
  • 原文地址:https://www.cnblogs.com/GallopingSnail/p/5869315.html
Copyright © 2020-2023  润新知