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的使用
原文地址:https://www.cnblogs.com/mttcug/p/8473936.html