问题引入:
下面console的输出结果是什么
var name = “one”;
var User =
function ( ) {
this.name = “two”;
}
var obj =
User( );
console.log(name);
答案是two
解析:this指向window修改此name属性
下面参考了:https://blog.csdn.net/QingWaXieZi/article/details/80786473
https://blog.csdn.net/liwusen/article/details/51657529
第一种: 自执行函数执行,函数内的this都指向window;
function test(){
console.log(this);
}
test();
//直接调用test() 输出对象为window
第二种: 给元素的某一个行为绑定方法,方法中的this是当前元素;
<div id="app">123</div>
<script>
var div = document.getElementById("app");
div.onclick = function() { //这里的this指向onclick前面的元素
console.log(this); // <div id="app">123</div>
}
</script>
第三种: 当方法名执行,看前面有没有点儿,有点儿,前面是谁,this就是谁.
没有点儿,this就是window;
var obj = {
name: "qingwa",
age: 28,
fn: function() {
console.log(this.name); // qingwa;
console.log(this); // obj;
}
}
obj.fn();
//------------------------------------------
function fn() {
console.log(this); // window
}
fn();
第四种: 在构造函数模式当中,函数体当中,this.xxx=xxx.是当前类的实例;
function Person(name, age) {
this.name = name; // this指per1;
this.age = age; // this指per1;
}
var per1 = new Person("qingwa", 28);
第五种: 我们还可以使用call,apply,bind来改变this的指向;且均比以上四种权重要高;