js的函数调用this指向问题

灰太狼 2021-11-29 07:46 508阅读 0赞

this永远指向函数运行时所在的对象,而不是函数被创建时所在的对象。匿名函数或不处于任何对象中的函数指向window 。
1.如果是call,apply,with,指定的this是谁,就是谁。
2.普通的函数调用,函数被谁调用,this就是谁。

js的函数调用

1.作为函数方法调用函数

在 JavaScript 中, 函数是对象。JavaScript 函数有它的属性和方法。
call() 和 apply() 是预定义的函数方法。 两个方法可用于调用函数,两个方法的第一个参数必须是对象本身。this指向函数的本身

  1. function myFunction(a, b) {
  2. console.log(a*b);
  3. }
  4. var myArray = [10, 2];
  5. var myObject = myFunction.apply(myObject, myArray);
  6. // 同: myFunction.apply(this, myArray); this指向函数本身
  7. function myFn(a,b) {
  8. console.log(a+b)
  9. }
  10. var myobj=myFn.call(myobj,2,3);
  11. // myFn.call(this,2,3);
2.作为一个函数调用

当函数没有被自身的对象调用时 this 的值就会变成全局对象。在 web 浏览器中全局对象是浏览器窗口(window 对象)。

  1. function myFunction(a, b) {
  2. return a * b;
  3. }
  4. myFunction(10, 2);// 返回 20
  5. //window.myFunction(10, 2);
  6. //全局对象
  7. function myFunction(a, b) {
  8. return this;//返回window this指向浏览器窗口
  9. }
  10. myFunction();
3.函数作为方法被调用

this指向函数所有者对象 对象

  1. var myObject = {
  2. firstName:"John",
  3. lastName: "Doe",
  4. fullName: function () {
  5. console.log(this//this指向myObject
  6. return this.firstName + " " + this.lastName;
  7. }
  8. }
  9. myObject.fullName(); // 返回 "John Doe"
4.使用构造函数调用函数

构造函数中 this 关键字没有任何的值。this 的值在函数调用实例化对象(new object)时创建。

  1. function myFunction(arg1, arg2) {
  2. this.firstName = arg1;
  3. this.lastName = arg2;
  4. }
  5. // This creates a new object
  6. var x = new myFunction("John","Doe");
  7. x.firstName; // 返回 "John"

构造函数的调用会创建一个新的对象。新对象会继承构造函数的属性和方法。

发表评论

表情:
评论列表 (有 0 条评论,508人围观)

还没有评论,来说两句吧...

相关阅读

    相关 JSthis指向问题

    this(上下文对象) 我们每次调用函数时,解析器都会将一个上下文对象作为隐含的参数传递进函数。 使用this来引用上下文对象,根据函数的调用形式不同,this的值也

    相关 JS this指向问题

    在绝大多数情况下,函数的调用方式决定了 `this` 的值。`this` 不能在执行期间被赋值,并且在每次函数被调用时 `this` 的值也可能会不同,所以总结 `this`