企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持知识库和私有化部署方案 广告
### 在函数中谁调用就指向谁 (在严格模式下"use strict",this为undefined) ``` function a() { var user = "逐梦之子" console.log(this.user); //undefined console.log(this); //window } a() //相当于window.a() this指向调用他的对象,这里函数 a 实际是被winder对象 ``` ### 在事件指向调用它的对象 构造函数中, 指向创建出来的实例 ``` function Fn () { this.user = "hhhh"; } var a = new Fn; console.log(a.user); //hhhh // a 继承fn模拟中的方法和属性,调用方法 Fn 的对象是 a,this就指向a ``` ### return ``` // function Fn () { // this.user = "hhhh"; // return {}; // } // var a = new Fn; // console.log(a.user); //undefined // function Fn () { // this.user = "hhhh"; // return // } // var a = new Fn; // console.log(a.user); //hhhh // 如果返回值是一个对象,那么this指向的就是那个返回的对象,如果返回值不是一个对象那么this还是指向函数的实例。 ``` ### call apply ``` var yc = { user : 'call', fn: function(a,b){ console.log(this) console.log(this.user); console.log(a+b); } } var yy = yc.fn; //如果不用call this指向window // yy(1,2); yy.call(yc,[1,2]); //this指向yc ``` apply和call相似但是第二个参数要是数组 ``` var yc = { user : 'call', fn: function(a,b){ console.log(this) console.log(this.user); console.log(a+b); } } var yy = yc.fn; // yy(1,2); yy.apply(yc,[1,2]); //如果不用apply this指向window ``` ### bind call和apply都是改变上下文中的this并立即执行这个函数,bind方法可以让对应的函数想什么时候调就什么时候调用,并且可以将参数在执行的时候添加, ``` var a = { user: '逐梦之子', fn: function (){ console.log(this.user); } } var b = a.fn; // b.bind(a); //不会输出 var c = b.bind(a); c(); //这样才会输出 ```