this指向
-
函数预编译过程this -->window
function test () { console.log(this); } test();//此时输出:window这个对象
-
全局作用域里this-->window
-
call/apply 可以改变函数运行时this指向
function Person (name, age) { this.name = name; this.age = age; } var person = new Person() var obj = { } Person.call(obj,"wu",20);//改变this指向,相当于在Person函数中顶部新增(this = obj),而后面两个是传入的参数 //实际上: Person() === person.call() //此时;obj = { // name: "wu", // age: 20 //} Person.apply(this,[age,name]); //这里只是有细微的差别,就是传参,apply第二个参数是一个实参数组
-
obj.func(): func()里面的this指向obj
var obj = { a: function () { console.log(this.name) }, name: "li" } obj.a();//输出:li----简言之谁调用this指向谁
-
练习
-
var name = "quan" var a = { name: "obj", say: function () { cosnolr.log(this.name); } } var fun = a.say; fun();//输出:"quan" a.say();//输出:"obj" //究极版 var b = { name: "objb", say: function (func) { func(); } } b.say(a.say);//输出:"quan" ---- 这里是因为b.say()--这个函数是用来执行里面的函数func(), //而func()执行时前面并没有由谁来调用---所以这里是走预编译环节this指向window b.say = a.say; b.say()//输出:objb
对于this指向特别注意是谁调用了该函数
-
var bar = {a: "02"}; function print () { bar.a = "a"; Object.prototype.b = "b"; return function inh () { console.log(bar.a); console.log(bar.b); } } print()();//输出:a,b;
-