javascript里面this的问题

 function People(name) {
            this.name = name;
            this.sayName = function () {
                console.log('my name is:' + this.name);
            }
        }
        People.prototype.walk = function () {
            console.log(this.name + ' is walking'); 这里面this指向的是谁啊?
        }
        var p1 = new People('我们');
        var p2 = new People('在这里');

People.prototype.walk()不好意思,问题没描述完全,这样这个函数里面的this代表了什么

阅读 2.1k
4 个回答

this 的指向在调用的时候才能确定,所以你加注释的地方是确定不了的,还是符合那几种指向方式,怎么调用 walk,就怎么指,这个调用方式和 this 指向关系你可以去搜 this指向

打印一下就知道了

People.prototype.walk = function ()
{
    console.log(this);
}
新手上路,请多包涵
function People(name) {
    this.name = name;
    this.sayName = function () {
        console.log('my name is:' + this.name);
    }
}
People.prototype.walk = function () {
    console.log(this.name + ' is walking'); 
}
var p1 = new People('我们');
p1.sayName()
p1.walk();

//my name is:我们
//我们 is walking

1、普通函数this指向问题:sayName()可以理解为闭包,内部函数可以访问外部的变量,this指向外部的name
2、基于原型链this指向问题: walk()函数是基于people原型链行的继承,walk()继承了所有父类的属性所以这里的this还是指向父类的name
3、基于箭头函数this的指向问题: this指向箭头函数上一级
总结:this的指向十分的复杂,应该根据函数被调用的方法来考虑具体的指向性问题。你不知道的javascript中有具体关于this的指向和作用域的理解,希望对你有帮助

推荐问题