this用法以及详解

以前了解过一些对象问题,了解对象前看了看this的用法,很有意思,也很基础,下面就是我总结的一些this方法


先来看看this 的一些小练习:

 

     var name="king";

	  var a={
           name:"Jhon",
           age:26,
           get:function () {
           	   var name="ping";
           	   alert(this.name)
           }

	  }
      a.get()  //结果1

      var b=a.get; 
      b();  //结果2

上面的结果一应该是 Jhon,  这个应该不用说,下面结果2 是king,为什么是king呢,原因是 a.get赋给b了,然而b所在的环境是全局环境 window, 当执行b时,this指向的是window, 那么this.name 就会寻找 window下的name

随着函数使用场合的不同,this的值会发生变化。但是有一个总的原则,那就是this指的是,调用函数的那个对象。


那么我们有没有办法 将b 中this.nam指向a对象呢?

这个时候我们就要用的 call 和apply这两个方法了

   

      var name="king";
	  var a={
           name:"Jhon",
           age:26,
           get:function () {
           	   var name="ping";
           	   alert(this.name)
           }

	  }
      var b=a.get; 
      b.call(a)  //结果 Jhon

   1.call方法: 

    语法:this.call(thisObj,Object)

             this:原this对象

             thisObj:this指向的新对象

             object:指定的参数列表,多个用逗号分隔

         

    说明:
      call 方法可以用来代替另一个对象调用一个方法。call 方法可将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的    新对象。 
  如果没有提供 thisObj 参数,那么 Global 对象被用作 thisObj。

  例如:

      

    <div id="one">字体</div>
    <script>
       function fun(b,c) {
       	  this.style[b]=c;
       }
       var one=document.getElementById('one');
       fun.call(one,"fontSize","30px");
    </script>

   2.apply方法: 

    语法:this.apply([thisObj[,argArray]]) 
    定义:this:原this对象

             thisObj:this指向的新对象

             argArray:指定的参数以数组形式【】展示

   说明: 
     如果 argArray 不是一个有效的数组或者不是 arguments 对象,那么将导致一个 TypeError。 
     如果没有提供 argArray 和 thisObj 任何一个参数,那么 Global 对象将被用作 thisObj, 并且无法被传递任何参数。

   

    <div id="one">字体</div>
    <script>
       function fun(b,c) {
       	  this.style[b]=c;
       }
       var one=document.getElementById('one');
       fun.apply(one,["fontSize","30px"]);
    </script>


下面是this的一个练习!可以看一下

 var a = {
            name:"zhang",
            sayName:function(){
                console.log("this.name="+this.name);
            }
        };
        var name = "ling";
        function sayName(){
            var name = "wang";
            var c={
                name:"jhon",
                age:"25"
            }
            var sss = a.sayName;
            sss();                        //this.name =1?
            a.sayName();                  //this.name =2?
            (a.sayName)();                //this.name =3?
            (b = a.sayName)();            //this.name=4?
            b.call(c)                     //this.name=5?
        }
        sayName();
 

上面练习的结果是: 1.ling      2. zhang    3. zhang      4.ling    5.jhon

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值