原型函数在使用'这个'?时如何知道指向何处?

时间:2017-04-07 10:03:53

标签: javascript constructor prototype-chain

给出以下代码:

var User = function(name) {
    this.name = name;
};

User.prototype.sayHello = function() {
    console.log('Hi my name is ' + this.name + '.');
};

var user1 = new User('Bob');
user1.sayHello();

到目前为止我学到的是,在函数语句中使用的this关键字指向全局对象,并且在方法中使用时,它在词法上位于其中。

我也知道new关键字创建一个空对象并调用构造函数并让它指向该新对象。

但我不明白的是,因为user1不拥有sayHello函数, 它上升了原型链。 但是原型中的函数如何知道在哪里引用this.name

控制台中的输出为:Hi my name is Bob.

1 个答案:

答案 0 :(得分:0)

因为如果你在user1.name上执行console.log,它是从User对象创建的,你将获得Bob作为输出,然后调用sayHello引用user1,因此this.name解析为Bob

var User = function(name) {
    this.name = name;
};

User.prototype.sayHello = function() {
    console.log('Hi my name is ' + this.name + '.');
};

var user1 = new User('Bob');
console.log(user1.name)
user1.sayHello();