zoukankan      html  css  js  c++  java
  • 《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
  • 相关阅读:
    【转】 测试人员的职业规划 --整理标注
    关于数据准备
    功能点算法及在软件测试中的应用
    MySQL常用命令大全
    Python学习笔记
    python 学习笔记 if语句
    一个男人关心的东西 决定了他的层次
    Oracle 计算两个时间的差值
    javascript对下拉列表框(select)的操作
    java需要掌握内容、核心不断更新中
  • 原文地址:https://www.cnblogs.com/GallopingSnail/p/5869315.html
Copyright © 2011-2022 走看看