js中this的使用

Posted 上帝不是要你成功,而是让你去尝试

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了js中this的使用相关的知识,希望对你有一定的参考价值。

this一般指执行当前代码的所有者

 

 

一个小李子:

                

<script type="text/javascript">
  var name = "Kevin Yang";
  function sayHi(){
    alert("你好,我的名字叫" + this.name);
  }
  var person = {};
  person.sayHello = sayHi;
  person.sayHello();
script>

sayHi() //Kevin Yang
person.sayHello()  //name is undefined

sayHi()函数中的this此时代表的window或者global ,window下有name属性
person.sayHello()中的this代指的就是person对象了,person中无name属性


 

 

本文例句三种指针使用错误情况:

1.dom中的函数事件

<script type="text/javascript">
  function sayHi(){
    alert("当前点击的元素是" + this.tagName);
  }  
script>
<input id="btnTest" type="button" value="点击我" onclick="sayHi()">


会报错,因为行数中的this此时指代的是window而不是dom


2.临时变量导致this丢失

<script type="text/javascript">
  var Utility = {
    decode:function(str){
      return unescape(str);
    },
    getCookie:function(key){
      // ... 省略提取cookie字符串的代码
      var value = "i%27m%20a%20cookie";
      return this.decode(value);
    }
  };
  alert(Utility.getCookie("identity"))
script>






这种写法是可以的但是一下写法就是错误的
<script type="text/javascript">
  function showUserIdentity(){
    // 保存getCookie函数到一个局部变量,因为下面会经常用到
    var getCookie = Utility.getCookie;
    alert(getCookie("identity"));
  }
  showUserIdentity();
script>
getCookie是一个临时变量,getCookie中的指针指代的是window,所以会报错
<script type="text/javascript">
  function showUserIdentity(){
    // 保存getCookie函数到一个局部变量,因为下面会经常用到
    var getCookie = Utility.getCookie;
   alert(getCookie.call(Utility,"identity"));
    //alert(getCookie.apply(Utility,["identity"]));

}
    showUserIdentity();

script>

3.传参时导致指针丢失 注意,Javascript里面都是值传递的,没有引用传递的概念
<script type="text/javascript">
  var person = {
    name:"Kevin Yang",
    sayHi:function(){
      alert("你好,我是"+this.name);
    }
  }
  setTimeout(person.sayHi,5000);
script>


window.setTimeout中this指向window
  var boundFunc = person.sayHi.bind(person,person.sayHi);
  setTimeout(boundFunc,5000);
 

 



































以上是关于js中this的使用的主要内容,如果未能解决你的问题,请参考以下文章

在片段java类中使用“this”和getLastSignedInAccount时出现错误[重复]

sublime text 3 添加代码片段

Chrome-Devtools代码片段中的多个JS库

谷歌浏览器调试jsp 引入代码片段,如何调试代码片段中的js

js 常用代码片段

ngx-translate实现国际化:this.translate.use()this.translate.get()this.translate.instant()onLangChange(代码片段