this指向
script标签中的this指向
<script>
console.log(this)
</script>
全局变量,全局方法,普通函数this指向需要看调用的环境
- 都省略了一个
window.
- this指向全局-
window
window.function myFun() {
console.log(this);
}
myFun();
var fun = 2;
===> window.fun =2;
// html 中的内容
<button onclick="myFun()"></button>
function myFun() {
console.log(this);
}
- 在html中定义一个元素,js中调用,this指向元素本身
<div id="divs"></div>
function myFun() {
console.log(this);
}
divs.myFun()
setInterval 中的this指向
setInterval(function() {
var a = 1
console.log(a);
console.log(this);
},1000)
相当于 ===>
window.setInterval(function() {
var a = 1
console.log(a);
console.log(this);
},1000)
箭头函数
var obj = {
naem : "momo",
fun() {
setInterval( () => {
console.log(this.name);
},200)
}
}
obj.fun();
对象函数调用
var obj = {
fun : function() {
console.log(this ,"++++++++++");
}
}
obj.fun();
构造函数
function Person(){
console.log(this,"++++++")
}
var p = new Person();
console.log(p)
对象中的this指向
- 指向:这里的this指向obj(谁调用this所在的函数,那么this就指向谁。)
var obj = {
name:'张三',
fn:function(){
console.log("你好,我叫"+this.name);
}
}
类中的this指向
- 指向:无论是在ES5还是ES6中,类中的this都是指向的这个类,也可以说是指向的通过类实例化的对象
apply() 与 call 中的this
function say(a,b) {
console.log(this,a+b);
}
say(5,2);
say.call({name : "momo",age : 18},3,5)
function say(a,b) {
console.log(this,a+b);
}
say(5,2);
say.apply({name : "momo",age : 18},[3.5])
- bind()—可以返回一个新的函数方法this指向可以定义,第一个参数
function say(a,b) {
console.log(this,a+b);
}
say(5,2);
var sa = say.bind({name : "momo",age : 18});
sa();
var sa = say.bind({name : "momo",age : 18},10);
sa(5);
var sa = say.bind({name : "momo",age : 18},10,5);
sa();
综合案例
var arr = [2,3,45,67,323,1];
var max = Math.max.apply(null,arr);
alert(max)
- 判断对象的类型 typeof 不准
- 所以使用以下方法
function getType(arg) {
var type = Object.protoType.toString.call(arg);
return type.slice(8,-1);
}
console.log(getType([]));
console.log(getType(/a/g));
console.log(getType(123));
console.log(getType(""));
console.log(getType(document.bodt));