• 《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
  • 相关阅读:
    no,no,不要使用kill -9
    Linux中etc目录详解
    Quartz任务调度器的使用
    RMI(Remote Method invocation,远程方法访问)
    SilverLight扩展控件RadTreeView
    SiverLight和HTML交互
    SilverLight控件之ContextMenu和RadContextMenu(菜单)
    SilverLight之向后台请求数据-WebClient
    SilverLight控件样式及控件模版
    在SilverLight中代码编写可选择树节点
  • 原文地址:https://www.cnblogs.com/GallopingSnail/p/5869315.html
Copyright © 2020-2023  润新知