JavaScript的this指向问题

什么是构造函数?
在 JavaScript 中,用 new 关键字来调用的函数,称为构造函数。

它的作用

重复需要使用的属性当做构造函数的参数传递,可以减少大量的重复操作过程。
在使用时,若 new 忘记使用,会产生严重的后果。会导致构造函数内部变量变为全局变量。

 

this 是什么?
理解this之前,先纠正一个观点,this 既不指向函数自身,也不指函数的词法作用域。
如果仅通过this的英文解释,太容易产生误导。
它实际是在函数被调用时才发生的绑定,也就是说this具体指向什么,取决于你是怎么调用的函数。

 

this 调用
  • 谁调用,指向谁
  • 如果赋值给对象,就会改变this的指向
  • 不在第一层调用,不会向上继承

 

1.以函数形式调用时,this永远指向window
alert(this)
=>[object Window]
或
function fn(){
    console.log(this);
}
fn();
=>[object Window]
2.以方法形式调用时,this是调用方法的对象
function foo() {
    console.log(this);
}
new foo();
=> [object Object]
3.以构造函数调用时,this.是新创建的那个对象
function fn(){
    console.log(this)
}
new p();
=>fn {}

 4.使用call和apply调用时,this的指向为this指定的那个对象

call和apply的使用用:
改变this的指向,第一个参数为你要传入的对象,传入后函数的this就指向了这个对象,后面的参数为你为函数传递的参数值
function  foo(x,y) {
    console.log(this);
    => foo {}
    console.log(x,y);
}
new foo();
//当后面参数个数确定时用call,参数之间用逗号连接
foo.call("abc1",3,4);
function  test(x,y) {
    console.log(this);
    => test {}
    console.log(x,y);
}
new test();
//当后面参数个数不确定时用apply,参数通过数组形式输入
test.apply("abc2",[3,4])

 

时间:2017-06-24 16:53:50
posted @ 2018-04-22 20:14  iameng  阅读(114)  评论(0)    收藏  举报