关于this,作用域,属性,原型链的一个小练习
function p () {
this.name = 'x';
var name = 'y';
this.getName = function () {
return name;
}
}
// 求值
console.log(new p().getName());
getName方法里面返回name值,此时name值从作用域里面找,即var name = 'y';
,返回y;
将getName方法里面的return name;
改成return this.name;
,这时会从this里面找属性为name的值,即'this.name = 'x';',返回x(之前一直觉得this取决于定义环境,而不取决于执行环境,后来得到一种说法是this取决于调用环境,包括方法调用、函数调用、构造器调用和apply/call调用,其实这边的调用和定义是一个意思,比如上面的this便是构造器调用)。
function p () {
// this.name = 'x';
// var name = 'y';
this.getName = function () {
return this.name;
}
}
p.prototype.name = 'z';
// 求值
console.log(new p().getName());
若找不到属性便会在原型链上找name,即p.prototype.name = 'z';
,返回z。
GitHub: https://github.com/mazeyqian
Blog: https://blog.mazey.net/
Blog: https://blog.mazey.net/